// // YMMemberCenterViewController.m // MSYOUPAI // // Created by YoMi on 2024/2/27. // Copyright © 2024 MS. All rights reserved. // #import "YMMemberCenterViewController.h" #import "YMMemberCenterViewModel.h" #import "YMMemberInfoView.h" #import "YMMemberRenewalItemView.h" #import "YMMemberPrivilegeItemView.h" #import "YMMemberPayMethodPopupView.h" @interface YMMemberCenterViewController () /// 会员中心VM @property (nonatomic, strong) YMMemberCenterViewModel *viewModel; /// 容器滚动视图 @property (nonatomic, strong) UIScrollView *contentScrollView; /// 容器视图 @property (nonatomic, strong) UIView *contentView; /// 会员信息视图 @property (nonatomic, strong) YMMemberInfoView *memberInfoView; /// 会员续费项目视图 @property (nonatomic, strong) YMMemberRenewalItemView *memberRenewalItemView; /// 会员特权视图圆角 @property (nonatomic, strong) UIView *cornerView; /// 会员特权视图 @property (nonatomic, strong) YMMemberPrivilegeItemView *memberPrivilegeView; /// 开通会员操作按钮 @property (nonatomic, strong) UIButton *openMemberOperationBtn; @end @implementation YMMemberCenterViewController @dynamic viewModel; - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } - (void)viewDidLoad { [super viewDidLoad]; //[self.view ym_setGradientBackgroundWithColors:@[HexColorFromRGB(0xFFEEA6), HexColorFromRGB(0xFFE888)] locations:@[@0,@1] startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)]; // UIImageView *imgv = [[UIImageView alloc] init]; // imgv.image = ImageByName(@""); // imgv.frame = self.view.bounds; // [self.view addSubview:imgv]; [self setNavHidden:YES]; UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, adapt(44))]; navView.backgroundColor = UIColor.clearColor; [self.view addSubview:navView]; [navView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(kYMStatusBarHeight); make.left.equalTo(self.view); make.right.equalTo(self.view); make.height.mas_equalTo(44); }]; UIButton *backButn = [UIButton buttonWithType:UIButtonTypeCustom]; backButn.frame = CGRectMake(0, 0, adapt(44), adapt(44)); UIImage *img = [[UIImage imageNamed:@"ym_navigation_white_icon"] imageWithTintColor:HexColorFromRGB(0x633228) renderingMode:(UIImageRenderingModeAlwaysOriginal)]; [backButn setImage:img forState:UIControlStateNormal]; [backButn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; [navView addSubview:backButn]; [backButn mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(navView).offset(0); make.left.equalTo(navView).offset(10); make.width.height.mas_equalTo(44); }]; UILabel *titleLabel = [[UILabel alloc] init]; titleLabel.text = @"会员中心"; titleLabel.textColor = HexColorFromRGB(0x633228); titleLabel.font = LCBoldFont(16); [navView addSubview:titleLabel]; [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(navView); }]; [OCNotificationCenter addObserver:self selector:@selector(weChatOrAlipayPaymentSuccess:) name:ALIPAY_SUCCESS_NOTIFICATION object:nil]; [OCNotificationCenter addObserver:self selector:@selector(weChatOrAlipayPaymentSuccess:) name:WECHATPAY_SUCCESS_NOTIFICATION object:nil]; } - (void)backAction { [self.navigationController popViewControllerAnimated:YES]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.viewModel.selectedRechargeItemSubject sendNext:@(1)]; } - (void)ym_setupViews{ [self.view insertSubview:self.contentScrollView atIndex:0]; [self.contentScrollView addSubview:self.contentView]; [self.contentView addSubview:self.memberInfoView]; [self.contentView addSubview:self.memberRenewalItemView]; [self.contentView addSubview:self.cornerView]; [self.contentView addSubview:self.memberPrivilegeView]; [self.view addSubview:self.openMemberOperationBtn]; [self.view setNeedsUpdateConstraints]; [self.view updateConstraintsIfNeeded]; } - (void)updateViewConstraints{ [self.contentScrollView mas_makeConstraints:^(MASConstraintMaker *make) { //make.top.equalTo(self.view).offset(kYMNavHeight); make.top.equalTo(self.view).offset(0); make.left.equalTo(self.view); make.right.equalTo(self.view); make.bottom.equalTo(self.view); }]; [self.openMemberOperationBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view).offset(adapt(32)); make.right.equalTo(self.view).offset(adapt(-32)); make.bottom.equalTo(self.view).offset(Is_iPhoneX ? adapt(-32) : adapt(-12)); make.height.mas_equalTo(adapt(54)); }]; [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentScrollView).offset(0); make.left.equalTo(self.contentScrollView); make.right.equalTo(self.contentScrollView); make.bottom.equalTo(self.contentScrollView); make.width.mas_equalTo(KScreenWidth); }]; UIImageView *wbgv = [[UIImageView alloc] init]; wbgv.image = ImageByName(@"ym_member_center_top_bg"); wbgv.backgroundColor = HexColorFromRGB(0xFFFFFF); [self.contentView insertSubview:wbgv atIndex:0]; [wbgv mas_makeConstraints:^(MASConstraintMaker *make) { make.top.left.right.equalTo(self.contentView); make.height.mas_equalTo(adapt(kYMNavHeight + 120)); }]; UIView *bgv = [[UIView alloc] init]; bgv.backgroundColor = UIColor.whiteColor; bgv.layer.cornerRadius = adapt(16); bgv.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; bgv.layer.masksToBounds = YES; [self.contentView insertSubview:bgv aboveSubview:wbgv]; [bgv mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(wbgv.mas_bottom).offset(adapt(-40)); make.left.right.bottom.equalTo(self.contentView); }]; [self.memberInfoView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView).offset(adapt(kYMNavHeight)); make.left.equalTo(self.contentView).offset(adapt(10)); make.right.equalTo(self.contentView).offset(adapt(-10)); }]; [self.memberRenewalItemView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.memberInfoView.mas_bottom).offset(adapt(-20)); make.left.equalTo(self.contentView).offset(adapt(10)); make.right.equalTo(self.contentView).offset(adapt(-10)); make.height.mas_equalTo(adapt(170)); }]; [self.cornerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.memberPrivilegeView); make.bottom.equalTo(self.memberPrivilegeView.mas_top); make.height.mas_equalTo(adapt(20)); }]; [self.memberPrivilegeView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.memberRenewalItemView.mas_bottom).offset(adapt(30)); make.left.equalTo(self.contentView).offset(adapt(0)); make.right.equalTo(self.contentView).offset(adapt(0)); make.height.mas_equalTo(adapt(140) * 4.5); make.bottom.equalTo(self.contentView).offset(adapt(-0)); }]; [super updateViewConstraints]; } - (void)ym_bindViewModel{ [self.memberInfoView ym_bindViewModel:self.viewModel]; [self.memberRenewalItemView ym_bindViewModel:self.viewModel]; [self.memberPrivilegeView ym_bindViewModel:self.viewModel]; [[YMGlobalUtils shared] getConfig]; [self.viewModel getMemberRechargeInfoData]; @weakify(self) [[[[RACObserve(self.viewModel, openMemberOperation) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSString * openMemberOperation) { @strongify(self) [self.openMemberOperationBtn setTitle:openMemberOperation forState:UIControlStateNormal]; }]; } - (void)weChatOrAlipayPaymentSuccess:(NSNotification *)notice{ [self.viewModel getMemberRechargeInfoData]; } - (UIScrollView *)contentScrollView{ if (!_contentScrollView) { _contentScrollView = [[UIScrollView alloc]init]; _contentScrollView.alwaysBounceVertical = YES; _contentScrollView.showsVerticalScrollIndicator = NO; _contentScrollView.showsHorizontalScrollIndicator = NO; _contentScrollView.backgroundColor = UIColor.clearColor; _contentScrollView.userInteractionEnabled = true; _contentScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; _contentScrollView.delegate = self; } return _contentScrollView; } - (UIView *)contentView{ if (!_contentView) { _contentView = [[UIView alloc]init]; } return _contentView; } - (YMMemberInfoView *)memberInfoView{ if (!_memberInfoView) { _memberInfoView = [[YMMemberInfoView alloc]init]; } return _memberInfoView; } - (YMMemberRenewalItemView *)memberRenewalItemView{ if (!_memberRenewalItemView) { _memberRenewalItemView = [[YMMemberRenewalItemView alloc]init]; } return _memberRenewalItemView; } - (YMMemberPrivilegeItemView *)memberPrivilegeView{ if (!_memberPrivilegeView) { _memberPrivilegeView = [[YMMemberPrivilegeItemView alloc]init]; _memberPrivilegeView.backgroundColor = HexColorFromRGB(0xFFFFFF); // _memberPrivilegeView.layer.cornerRadius = adapt(20); // _memberPrivilegeView.layer.masksToBounds = YES; } return _memberPrivilegeView; } - (UIButton *)openMemberOperationBtn{ if (!_openMemberOperationBtn) { _openMemberOperationBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _openMemberOperationBtn.titleLabel.font = LCBoldFont(15); [_openMemberOperationBtn setTitle:@"操作" forState:UIControlStateNormal]; [_openMemberOperationBtn setTitleColor:rgba(99, 50, 40, 1) forState:UIControlStateNormal]; [_openMemberOperationBtn ym_setGradientBackgroundWithColors:@[rgba(255, 210, 168, 1),rgba(245, 172, 113, 1)] locations:kMainGradLocation startPoint:kMainGradStartP endPoint:kMainGradEndP]; _openMemberOperationBtn.layer.cornerRadius = adapt(27); _openMemberOperationBtn.layer.masksToBounds = YES; WS(weakSelf) [[[_openMemberOperationBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { if (weakSelf.viewModel.payAmount <= 0) { [ZCHUDHelper showTitle:@"请选择订阅服务项目"]; return; } YMMemberPayMethodPopupView *customView = [[YMMemberPayMethodPopupView alloc]init]; [customView ym_bindViewModel:weakSelf.viewModel]; YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom]; popupView.priority = 999; popupView.cornerRadius = adapt(10); popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight; popupView.positionStyle = YMPositionStyleBottom; popupView.isClickBgDismiss = NO; popupView.isHideBg = NO; popupView.bgAlpha = 0.5; [popupView pop]; @weakify(popupView) customView.buttonBlock = ^(BOOL isConfirm, NSString * _Nonnull selectedPayCode) { @strongify(popupView) if (isConfirm) { [weakSelf.viewModel.selectedPayMethodTypeSubject sendNext:selectedPayCode]; } [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0]; }; customView.dismissBlock = ^{ @strongify(popupView) [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0]; }; }]; } return _openMemberOperationBtn; } - (UIView *)cornerView { if (!_cornerView) { _cornerView = [[UIView alloc] init]; _cornerView.backgroundColor = HexColorFromRGB(0xFFFFFF); [_cornerView addRectCorner:(UIRectCornerTopLeft | UIRectCornerTopRight) radius:adapt(20)]; } return _cornerView; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat offsetY = scrollView.contentOffset.y; if (offsetY <= 0) { scrollView.contentOffset = CGPointMake(0, 0); } } @end