YMImproveInfoViewController.m 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. //
  2. // YMImproveInfoViewController.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/8.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMImproveInfoViewController.h"
  9. #import "YMImproveInfoViewModel.h"
  10. #import "YMImproveInfoAvatarView.h"
  11. #import "YMImproveInfoMaleNicknameView.h"
  12. #import "YMImproveInfoFemaleNicknameView.h"
  13. #import "YMImproveInfoGenderView.h"
  14. #import "YMImproveInfoAgeView.h"
  15. #import "YMImproveInfoInviteCodeView.h"
  16. #import "PGDatePickManager.h"
  17. #import <IQKeyboardManager/IQKeyboardManager.h>
  18. @interface YMImproveInfoViewController ()
  19. /// 完善信息VM
  20. @property (nonatomic, strong) YMImproveInfoViewModel *viewModel;
  21. /// 容器滚动视图
  22. @property (nonatomic, strong) UIScrollView *contentScrollView;
  23. @property (nonatomic, strong) UIImageView *topImgV;
  24. /// 容器视图
  25. @property (nonatomic, strong) UIView *contentView;
  26. /// 完善信息标签
  27. @property (nonatomic, strong) UILabel *improveInfoLb;
  28. @property (nonatomic, strong) UILabel *tipLb;
  29. /// 头像视图
  30. @property (nonatomic, strong) YMImproveInfoAvatarView *avatarView;
  31. /// 男性昵称视图
  32. @property (nonatomic, strong) YMImproveInfoMaleNicknameView *maleNicknameView;
  33. /// 女性昵称视图
  34. @property (nonatomic, strong) YMImproveInfoFemaleNicknameView *femaleNicknameView;
  35. /// 性别视图
  36. @property (nonatomic, strong) YMImproveInfoGenderView *genderView;
  37. /// 年龄视图
  38. @property (nonatomic, strong) YMImproveInfoAgeView *ageView;
  39. /// 邀请码视图
  40. //@property (nonatomic, strong) YMImproveInfoInviteCodeView *inviteCodeView;
  41. @property (nonatomic, strong) UILabel *alertLb;
  42. /// 开启缘分按钮
  43. @property (nonatomic, strong) UIButton *openOpportunityBtn;
  44. @end
  45. @implementation YMImproveInfoViewController
  46. @dynamic viewModel;
  47. - (void)viewDidLoad {
  48. [super viewDidLoad];
  49. self.view.backgroundColor = UIColor.whiteColor;
  50. IQKeyboardManager *keyboardManager = [IQKeyboardManager sharedManager];
  51. keyboardManager.enable = YES;
  52. self.isHideLeftItem = YES;
  53. [self setNavHidden:YES];
  54. UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, adapt(438))];
  55. imgV.image = ImageByName(@"ym_improve_info_top_bg");
  56. imgV.userInteractionEnabled = true;
  57. [self.view addSubview:imgV];
  58. UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  59. [leftBtn setImage:ImageByName(@"ym_navigation_black_icon") forState:UIControlStateNormal];
  60. [[[leftBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) {
  61. YMTipsPopupView *customView = [[YMTipsPopupView alloc]init];
  62. customView.cancelTitle = @"取消";
  63. customView.confirmTitle = @"放弃";
  64. customView.confirmBgColor = HexColorFromRGB(0x7CF997);
  65. customView.confirmTitleColor = HexColorFromRGB(0x000000);
  66. [customView configutationWithTips:@"是否放弃完善信息?" TipsAlignment:NSTextAlignmentCenter IsHideTitle:YES IsHideSingleButton:YES];
  67. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleFade dismissStyle:YMDismissStyleFade];
  68. popupView.priority = 999;
  69. popupView.cornerRadius = adapt(10);
  70. popupView.rectCorners = UIRectCornerAllCorners;
  71. popupView.positionStyle = YMPositionStyleCenter;
  72. popupView.isHideBg = NO;
  73. popupView.bgAlpha = 0.3;
  74. @weakify(popupView)
  75. customView.buttonBlock = ^(BOOL isConfirm) {
  76. @strongify(popupView)
  77. if (isConfirm) {
  78. [LCTools changeRootToLogin];
  79. }
  80. [popupView dismissWithStyle:YMDismissStyleFade duration:2.0];
  81. };
  82. [popupView pop];
  83. }];
  84. [self.view addSubview:leftBtn];
  85. [leftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  86. make.top.equalTo(self.view).offset(kYMNavHeight-adapt(40));
  87. make.left.equalTo(self.view).offset(8);
  88. make.width.height.mas_equalTo(adapt(40));
  89. }];
  90. // [self setLeftBarButtonWithImage:@"ym_navigation_black_icon" block:^(id _Nonnull sender) {
  91. // YMTipsPopupView *customView = [[YMTipsPopupView alloc]init];
  92. // customView.cancelTitle = @"取消";
  93. // customView.confirmTitle = @"放弃";
  94. // customView.confirmBgColor = HexColorFromRGB(0x7CF997);
  95. // customView.confirmTitleColor = HexColorFromRGB(0x000000);
  96. // [customView configutationWithTips:@"是否放弃完善信息?" TipsAlignment:NSTextAlignmentCenter IsHideTitle:YES IsHideSingleButton:YES];
  97. // YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleFade dismissStyle:YMDismissStyleFade];
  98. // popupView.priority = 999;
  99. // popupView.cornerRadius = adapt(10);
  100. // popupView.rectCorners = UIRectCornerAllCorners;
  101. // popupView.positionStyle = YMPositionStyleCenter;
  102. // popupView.isHideBg = NO;
  103. // popupView.bgAlpha = 0.3;
  104. // @weakify(popupView)
  105. // customView.buttonBlock = ^(BOOL isConfirm) {
  106. // @strongify(popupView)
  107. // if (isConfirm) {
  108. // [LCTools changeRootToLogin];
  109. // }
  110. // [popupView dismissWithStyle:YMDismissStyleFade duration:2.0];
  111. // };
  112. // [popupView pop];
  113. //
  114. // }];
  115. [UMengRecordTool umengEventCountWithId:EnterRegistration];
  116. }
  117. - (void)viewWillAppear:(BOOL)animated{
  118. [super viewWillAppear:animated];
  119. [UMengRecordTool umengEnterViewWithName:NSStringFromClass(self.class)];
  120. }
  121. - (void)viewWillDisappear:(BOOL)animated{
  122. [super viewWillDisappear:animated];
  123. [UMengRecordTool umengOutViewWithName:NSStringFromClass(self.class)];
  124. }
  125. - (void)ym_setupViews{
  126. // [self.view addSubview:self.topImgV];
  127. // [self.view addSubview:self.contentScrollView];
  128. [self.view addSubview:self.contentView];
  129. [self.contentView addSubview:self.improveInfoLb];
  130. [self.contentView addSubview:self.tipLb];
  131. [self.contentView addSubview:self.avatarView];
  132. [self.contentView addSubview:self.maleNicknameView];
  133. [self.contentView addSubview:self.femaleNicknameView];
  134. [self.contentView addSubview:self.ageView];
  135. [self.contentView addSubview:self.genderView];
  136. // [self.contentView addSubview:self.inviteCodeView];
  137. [self.view addSubview:self.alertLb];
  138. [self.view addSubview:self.openOpportunityBtn];
  139. [self.view setNeedsUpdateConstraints];
  140. [self.view updateConstraintsIfNeeded];
  141. }
  142. - (void)updateViewConstraints{
  143. // [self.contentScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
  144. // make.top.equalTo(self.view).offset(kYMNavHeight);
  145. // make.left.equalTo(self.view);
  146. // make.right.equalTo(self.view);
  147. // }];
  148. [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
  149. make.top.equalTo(self.view).offset(kYMNavHeight);
  150. make.left.equalTo(self.view);
  151. make.right.equalTo(self.view);
  152. make.bottom.equalTo(self.view);
  153. }];
  154. // [self.topImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  155. // make.top.equalTo(self.view);
  156. // make.left.equalTo(self.view);
  157. // make.right.equalTo(self.view);
  158. // make.height.mas_equalTo(adapt(460));
  159. // }];
  160. [self.improveInfoLb mas_makeConstraints:^(MASConstraintMaker *make) {
  161. make.top.equalTo(self.contentView).offset(adapt(10));
  162. make.left.equalTo(self.contentView).offset(adapt(30));
  163. }];
  164. [self.tipLb mas_makeConstraints:^(MASConstraintMaker *make) {
  165. make.top.equalTo(self.improveInfoLb.mas_bottom).offset(adapt(5));
  166. make.left.equalTo(self.improveInfoLb);
  167. }];
  168. [self.avatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  169. make.top.equalTo(self.tipLb.mas_bottom).offset(adapt(18));
  170. make.left.equalTo(self.contentView).offset(adapt(30));
  171. make.width.height.mas_equalTo(adapt(96));
  172. }];
  173. [self.maleNicknameView mas_makeConstraints:^(MASConstraintMaker *make) {
  174. make.top.equalTo(self.avatarView.mas_bottom).offset(adapt(30));
  175. make.left.equalTo(self.contentView).offset(30);
  176. make.right.equalTo(self.contentView).offset(-30);
  177. make.height.mas_equalTo(adapt(75));
  178. }];
  179. [self.femaleNicknameView mas_makeConstraints:^(MASConstraintMaker *make) {
  180. make.top.equalTo(self.avatarView.mas_bottom).offset(adapt(30));
  181. make.left.equalTo(self.contentView).offset(30);
  182. make.right.equalTo(self.contentView).offset(-30);
  183. make.height.mas_equalTo(adapt(75));
  184. }];
  185. [self.genderView mas_makeConstraints:^(MASConstraintMaker *make) {
  186. make.top.equalTo(self.maleNicknameView.mas_bottom).offset(adapt(20));
  187. make.left.equalTo(self.contentView).offset(30);
  188. make.right.equalTo(self.contentView).offset(-30);
  189. make.height.mas_equalTo(adapt(75));
  190. }];
  191. [self.ageView mas_makeConstraints:^(MASConstraintMaker *make) {
  192. make.top.equalTo(self.genderView.mas_bottom).offset(adapt(20));
  193. make.left.equalTo(self.contentView).offset(30);
  194. make.right.equalTo(self.contentView).offset(-30);
  195. make.height.mas_equalTo(adapt(75));
  196. }];
  197. // [self.inviteCodeView mas_makeConstraints:^(MASConstraintMaker *make) {
  198. // make.top.equalTo(self.ageView.mas_bottom).offset(adapt(28));
  199. // make.left.equalTo(self.contentView);
  200. // make.right.equalTo(self.contentView);
  201. // make.bottom.equalTo(self.contentView).offset(adapt(-10));
  202. // }];
  203. [self.openOpportunityBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  204. make.left.equalTo(self.view).offset(adapt(40));
  205. make.right.equalTo(self.view).offset(adapt(-40));
  206. make.bottom.equalTo(self.view).offset(Is_iPhoneX ? adapt(-32) : adapt(-12));
  207. make.height.mas_equalTo(adapt(54));
  208. }];
  209. [self.alertLb mas_makeConstraints:^(MASConstraintMaker *make) {
  210. make.left.equalTo(self.view).offset(adapt(20));
  211. make.right.equalTo(self.view).offset(adapt(-20));
  212. make.bottom.equalTo(self.openOpportunityBtn.mas_top).offset(adapt(-10));
  213. make.height.mas_equalTo(adapt(17));
  214. }];
  215. [super updateViewConstraints];
  216. }
  217. - (void)ym_bindViewModel{
  218. [self.avatarView ym_bindViewModel:self.viewModel];
  219. [self.maleNicknameView ym_bindViewModel:self.viewModel];
  220. [self.femaleNicknameView ym_bindViewModel:self.viewModel];
  221. [self.genderView ym_bindViewModel:self.viewModel];
  222. [self.ageView ym_bindViewModel:self.viewModel];
  223. // [self.inviteCodeView ym_bindViewModel:self.viewModel];
  224. [self.viewModel getNicknameOrAvatarData];
  225. @weakify(self)
  226. [[[[RACObserve(self.viewModel, genderType) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id _Nullable value) {
  227. @strongify(self)
  228. switch ([value intValue]) {
  229. case 2:
  230. {
  231. self.maleNicknameView.hidden = NO;
  232. self.femaleNicknameView.hidden = YES;
  233. self.openOpportunityBtn.enabled = YES;
  234. self.openOpportunityBtn.alpha = 1;
  235. }
  236. break;
  237. case 1:
  238. {
  239. self.maleNicknameView.hidden = YES;
  240. self.femaleNicknameView.hidden = NO;
  241. [self.viewModel.validImproveInfoSignal subscribeNext:^(id _Nullable value) {
  242. self.openOpportunityBtn.enabled = [value boolValue];
  243. if ([value boolValue]) {
  244. self.openOpportunityBtn.alpha = 1;
  245. } else {
  246. self.openOpportunityBtn.alpha = 0.5;
  247. }
  248. }];
  249. }
  250. break;
  251. default:
  252. break;
  253. }
  254. [self.viewModel randomAvatar];
  255. }];
  256. }
  257. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
  258. [self.view resignFirstResponder];
  259. }
  260. - (UIScrollView *)contentScrollView{
  261. if (!_contentScrollView) {
  262. _contentScrollView = [[UIScrollView alloc]init];
  263. _contentScrollView.alwaysBounceVertical = YES;
  264. _contentScrollView.showsVerticalScrollIndicator = NO;
  265. _contentScrollView.showsHorizontalScrollIndicator = NO;
  266. _contentScrollView.backgroundColor = UIColor.whiteColor;
  267. _contentScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
  268. }
  269. return _contentScrollView;
  270. }
  271. - (UIView *)contentView{
  272. if (!_contentView) {
  273. _contentView = [[UIView alloc]init];
  274. }
  275. return _contentView;
  276. }
  277. - (UIImageView *)topImgV{
  278. if (!_topImgV) {
  279. _topImgV = [[UIImageView alloc]init];
  280. _topImgV.image = ImageByName(@"ym_improve_info_top_bg");
  281. _topImgV.userInteractionEnabled = YES;
  282. }
  283. return _topImgV;
  284. }
  285. - (UILabel *)improveInfoLb{
  286. if (!_improveInfoLb) {
  287. _improveInfoLb = [[UILabel alloc]init];
  288. _improveInfoLb.font = LCBoldFont(22);
  289. _improveInfoLb.textColor = HexColorFromRGB(0x1B2739);
  290. _improveInfoLb.textAlignment = NSTextAlignmentLeft;
  291. _improveInfoLb.text = @"完善资料";
  292. _improveInfoLb.numberOfLines = 0;
  293. }
  294. return _improveInfoLb;
  295. }
  296. - (UILabel *)tipLb{
  297. if (!_tipLb) {
  298. _tipLb = [[UILabel alloc]init];
  299. _tipLb.font = LCFont(14);
  300. _tipLb.textColor = HexColorFromRGBA(0x000000,0.35);
  301. _tipLb.textAlignment = NSTextAlignmentLeft;
  302. _tipLb.text = @"让大家更好的了解你";
  303. _tipLb.numberOfLines = 0;
  304. }
  305. return _tipLb;
  306. }
  307. - (UILabel *)alertLb{
  308. if (!_alertLb) {
  309. _alertLb = [[UILabel alloc]init];
  310. _alertLb.font = LCFont(12);
  311. _alertLb.textColor = HexColorFromRGBA(0xF04747,1);
  312. _alertLb.textAlignment = NSTextAlignmentCenter;
  313. _alertLb.text = @"性别填写后不可修改,请准确填写哦!";
  314. _alertLb.numberOfLines = 1;
  315. }
  316. return _alertLb;
  317. }
  318. - (YMImproveInfoAvatarView *)avatarView{
  319. if (!_avatarView) {
  320. _avatarView = [[YMImproveInfoAvatarView alloc]init];
  321. }
  322. return _avatarView;
  323. }
  324. - (YMImproveInfoMaleNicknameView *)maleNicknameView{
  325. if (!_maleNicknameView) {
  326. _maleNicknameView = [[YMImproveInfoMaleNicknameView alloc]init];
  327. _maleNicknameView.hidden = NO;
  328. }
  329. return _maleNicknameView;
  330. }
  331. - (YMImproveInfoFemaleNicknameView *)femaleNicknameView{
  332. if (!_femaleNicknameView) {
  333. _femaleNicknameView = [[YMImproveInfoFemaleNicknameView alloc]init];
  334. _femaleNicknameView.hidden = YES;
  335. }
  336. return _femaleNicknameView;
  337. }
  338. - (YMImproveInfoGenderView *)genderView{
  339. if (!_genderView) {
  340. _genderView = [[YMImproveInfoGenderView alloc]init];
  341. }
  342. return _genderView;
  343. }
  344. - (YMImproveInfoAgeView *)ageView{
  345. if (!_ageView) {
  346. _ageView = [[YMImproveInfoAgeView alloc]init];
  347. _ageView.userInteractionEnabled = YES;
  348. WS(weakSelf)
  349. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  350. [_ageView addGestureRecognizer:tap];
  351. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  352. [weakSelf.viewModel openAgePickerPopupView];
  353. }];
  354. }
  355. return _ageView;
  356. }
  357. - (UIButton *)openOpportunityBtn{
  358. if (!_openOpportunityBtn) {
  359. _openOpportunityBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  360. _openOpportunityBtn.titleLabel.font = LCBoldFont(15);
  361. [_openOpportunityBtn setTitle:@"开启缘分" forState:UIControlStateNormal];
  362. [_openOpportunityBtn setTitleColor:MAINGRIDTitleC forState:UIControlStateNormal];
  363. [_openOpportunityBtn ym_setGradientBackgroundWithColors:kMainGradColors locations:kMainGradLocation startPoint:kMainGradStartP endPoint:kMainGradEndP];
  364. _openOpportunityBtn.layer.cornerRadius = adapt(27);
  365. _openOpportunityBtn.layer.masksToBounds = true;
  366. WS(weakSelf)
  367. [[[_openOpportunityBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) {
  368. YMTipsPopupView *customView = [[YMTipsPopupView alloc]init];
  369. customView.confirmBgColor = kMainGradColor2;
  370. customView.confirmTitleColor = HexColorFromRGB(0xFFFFFF);
  371. [customView configutationWithTips:@"性别选择后,将无法修改,请确认你的性别" TipsAlignment:NSTextAlignmentCenter IsHideTitle:YES IsHideSingleButton:YES];
  372. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleFade dismissStyle:YMDismissStyleFade];
  373. popupView.priority = 999;
  374. popupView.cornerRadius = adapt(10);
  375. popupView.rectCorners = UIRectCornerAllCorners;
  376. popupView.positionStyle = YMPositionStyleCenter;
  377. popupView.isHideBg = NO;
  378. popupView.bgAlpha = 0.3;
  379. @weakify(popupView)
  380. customView.buttonBlock = ^(BOOL isConfirm) {
  381. @strongify(popupView)
  382. if (isConfirm) {
  383. [weakSelf.viewModel submitImproverInfoData];
  384. }
  385. [popupView dismissWithStyle:YMDismissStyleFade duration:2.0];
  386. };
  387. [popupView pop];
  388. }];
  389. }
  390. return _openOpportunityBtn;
  391. }
  392. @end