YMImproveInfoViewController.m 16 KB

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