// // RQHomePageViewController.m // RQCommon // // Created by 张嵘 on 2018/11/21. // Copyright © 2018 张嵘. All rights reserved. // #import "RQHomePageViewController.h" @interface RQHomePageViewController () /// viewModel @property (nonatomic, readonly, strong) RQHomePageViewModel *viewModel; @property (nonatomic, readwrite, strong) JXPagerView *pagerView; @property (nonatomic, readwrite, strong) JXCategoryTitleImageView *categoryView; @property (nonatomic, readwrite, strong) UIView *headerView; @property (nonatomic, readwrite, strong) SDCycleScrollView *cycleScrollView; @property (nonatomic, readwrite, strong) NSArray *titles; @property (nonatomic, readwrite, strong) NSArray *imagesArr; @property (nonatomic, readonly, assign) float cycleScrollViewHeight; @end @implementation RQHomePageViewController @dynamic viewModel; #pragma mark - SystemMethod - (void)viewDidLoad { [super viewDidLoad]; /// 初始化 [self rq_setup]; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.pagerView.frame = CGRectMake(0, RQ_APPLICATION_TOP_BAR_HEIGHT, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - RQ_APPLICATION_TOP_BAR_HEIGHT - RQ_APPLICATION_TAB_BAR_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT); } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (RQ_COMMON_MANAGER.SDJK_APP_ICON_NEED_CHANGE) { [[UIApplication sharedApplication] setAlternateIconName:@"AppIcon_NewRule" completionHandler:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"set alternative icon error:%@", error.localizedDescription); } }]; } else { [[UIApplication sharedApplication] setAlternateIconName:@"AppIcon_Old" completionHandler:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"set alternative icon error:%@", error.localizedDescription); } }]; } } #pragma mark - PrivateMethods /// 初始化 - (void)rq_setup { @weakify(self) /// set up ... [self.view addSubview:self.pagerView]; [[RACObserve(RQ_USER_MANAGER, currentUser) distinctUntilChanged] subscribeNext:^(RQUserModel *userModel) { self.navigationItem.leftBarButtonItem = [UIBarButtonItem rq_customItemWithTitle:RQ_USER_MANAGER.nickName font:RQMediumFont(17) titleColor:RQ_MAIN_TEXT_COLOR_1 imageName:RQStringIsNotEmpty(RQ_USER_MANAGER.headImage)? RQ_USER_MANAGER.headImage : @"headImagePlaceholder" target:self selector:@selector(headImageAction) contentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft EdgeInsetsStyle:RQButtonEdgeInsetsStyleLeft space:2.f]; }]; [RACObserve(RQ_USER_MANAGER, isLogin) subscribeNext:^(id _Nullable x) { @strongify(self) if (RQ_USER_MANAGER.isLogin) { [RQ_COMMON_MANAGER checkVersionWithComplete:^(BOOL isOpen) { @strongify(self) if (isOpen) { self.navigationItem.rightBarButtonItems = @[]; } else { [[RACSignal combineLatest:@[RACObserve(RQ_USER_MANAGER, isVip), RACObserve(RQ_HTTP_Service, networkReachabilityStatus)] reduce:^(id _Nullable x, id _Nullable y) { return x; }] subscribeNext:^(id _Nullable x) { @strongify(self) if (RQ_HTTP_Service.networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) { self.navigationItem.rightBarButtonItems = @[]; } else { self.navigationItem.rightBarButtonItem = [UIBarButtonItem rq_customItemWithTitle:(RQ_USER_MANAGER.isVip > 0)? ((RQ_USER_MANAGER.isVip > 2)? @"" : @"VIP会员") : @"非VIP会员" font:RQMediumFont(17) titleColor:RQ_MAIN_TEXT_COLOR_1 imageName:(RQ_USER_MANAGER.isVip > 0)? ((RQ_USER_MANAGER.isVip > 2)? @"" : @"member") : @"noMember" target:self selector:(RQ_USER_MANAGER.isVip > 0)? nil : @selector(vipAction) contentHorizontalAlignment:UIControlContentHorizontalAlignmentRight EdgeInsetsStyle:RQButtonEdgeInsetsStyleLeft space:4.f]; } }]; } }]; } else { self.navigationItem.rightBarButtonItems = @[]; } }]; } - (void)headImageAction { if ([RQ_USER_MANAGER isShouldLogin]) { RQUserInfoViewModel *viewModel = [[RQUserInfoViewModel alloc] initWithServices:self.viewModel.services params:nil]; [self.viewModel.services pushViewModel:viewModel animated:YES]; } } - (void)vipAction { RQActivateVIPViewModel *activateVIPViewModel = [[RQActivateVIPViewModel alloc] initWithServices:self.viewModel.services params:nil]; [self.viewModel.services pushViewModel:activateVIPViewModel animated:YES]; } #pragma mark - JXPagerViewDelegate - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView { return self.headerView; } - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView { return self.cycleScrollViewHeight; } - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return RQHeightForPinSectionHeaderInPagerView_One; } - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return self.categoryView; } - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView { //和categoryView的item数量一致 return self.categoryView.titles.count; } - (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index { RQHomeSubPageViewModel *homeSubPageViewModel = [[RQHomeSubPageViewModel alloc] initWithServices:self.viewModel.services params:@{RQHomePageCarTypeKey : @(index)}]; RQHomeSubPageViewController *homeSubPageViewController = [[RQHomeSubPageViewController alloc] initWithViewModel:homeSubPageViewModel]; return homeSubPageViewController; } #pragma mark - JXCategoryViewDelegate - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index { self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0); RQ_COMMON_MANAGER.carType = index; } - (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index { } - (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index { } #pragma mark - JXPagerMainTableViewGestureDelegate - (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([self checkIsNestContentScrollView:(UIScrollView *)gestureRecognizer.view] || [self checkIsNestContentScrollView:(UIScrollView *)otherGestureRecognizer.view]) { //如果交互的是嵌套的contentScrollView,证明在左右滑动,就不允许同时响应 return NO; } return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]; } - (BOOL)checkIsNestContentScrollView:(UIScrollView *)scrollView { for (RQHomeSubPageViewController *list in self.pagerView.validListDict.allValues) { if (list.contentScrollView == scrollView) { return YES; } } return NO; } #pragma mark - SDCycleScrollViewDelegate - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index { } #pragma mark - LazyLoad - (JXPagerView *)pagerView { if (!_pagerView) { _pagerView = [[JXPagerView alloc] initWithDelegate:self]; _pagerView.mainTableView.gestureDelegate = self; _pagerView.mainTableView.bounces = NO; } return _pagerView; } - (JXCategoryTitleImageView *)categoryView { if (!_categoryView) { _categoryView = [[JXCategoryTitleImageView alloc] init]; _categoryView.delegate = self; _categoryView.titles = self.titles; _categoryView.contentEdgeInsetLeft = 16; _categoryView.contentEdgeInsetRight = 16; _categoryView.titleSelectedColor = RQ_MAIN_TEXT_COLOR_1; _categoryView.titleColor = RQ_MAIN_TEXT_COLOR_2; _categoryView.titleFont = RQRegularFont(16); _categoryView.titleSelectedFont = RQRegularFont(16); _categoryView.titleColorGradientEnabled = YES; _categoryView.titleLabelZoomEnabled = NO; _categoryView.contentScrollViewClickTransitionAnimationEnabled = NO; _categoryView.titleLabelZoomSelectedVerticalOffset = 0.0f; _categoryView.titleLabelVerticalOffset = 0; _categoryView.titleNumberOfLines = 0; _categoryView.imageNames = self.imagesArr; _categoryView.imageSize = CGSizeMake(65.f, 25.f); _categoryView.titleImageSpacing = 2; _categoryView.cellWidth = (RQ_SCREEN_WIDTH - 32.f) / self.titles.count; _categoryView.cellSpacing = 0; _categoryView.imageTypes = @[@0, @0, @0, @0]; UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(16, 0, RQ_SCREEN_WIDTH - 32.f, RQHeightForPinSectionHeaderInPagerView_One - 7.f)]; bgImageView.image = [UIImage imageWithColor:RQ_BACKGROUNDCOLOR_1 size:CGSizeMake((RQ_SCREEN_WIDTH - 32.f), RQHeightForPinSectionHeaderInPagerView_One - 7.f)]; [_categoryView addSubview:bgImageView]; [_categoryView sendSubviewToBack:bgImageView]; _categoryView.titleColorGradientEnabled = YES; JXCategoryIndicatorImageView *indicatorImageView = [[JXCategoryIndicatorImageView alloc] init]; indicatorImageView.componentPosition = JXCategoryComponentPosition_Top; indicatorImageView.indicatorImageView.image = [UIImage imageWithColor:RQ_BACKGROUNDCOLOR_2 size:CGSizeMake((RQ_SCREEN_WIDTH - 32.f) / self.titles.count, RQHeightForPinSectionHeaderInPagerView_One - 7.f)]; indicatorImageView.indicatorImageViewSize = CGSizeMake((RQ_SCREEN_WIDTH - 32.f) / self.titles.count, RQHeightForPinSectionHeaderInPagerView_One - 7.f); JXCategoryIndicatorImageView *indicatorImageView1 = [[JXCategoryIndicatorImageView alloc] init]; indicatorImageView1.componentPosition = JXCategoryComponentPosition_Bottom; indicatorImageView1.indicatorImageView.image = RQImageNamed(@"arrowDown"); indicatorImageView1.indicatorImageViewSize = CGSizeMake(15.f, 7.f); _categoryView.indicators = @[indicatorImageView,indicatorImageView1]; _categoryView.defaultSelectedIndex = 0; /// !!!: 将列表容器视图关联到 categoryView _categoryView.listContainer = (id)self.pagerView.listContainerView; } return _categoryView; } - (UIView *)headerView { if (!_headerView) { _headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, RQ_SCREEN_WIDTH, self.cycleScrollViewHeight)]; UIView *view = [[UIView alloc] initWithFrame:CGRectMake(16, 0, (RQ_SCREEN_WIDTH - 32.f), (RQ_SCREEN_WIDTH - 32.f) * (100.f / 375.f))]; view.layer.cornerRadius = 10.f; view.clipsToBounds = YES; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, (RQ_SCREEN_WIDTH - 32.f), (RQ_SCREEN_WIDTH - 32.f) * (100.f / 375.f))]; imageView.image = [UIImage imageNamed:@"cycleScrollViewPlaceholderImage"]; [view addSubview:imageView]; [_headerView addSubview:view]; // [_headerView addSubview:self.cycleScrollView]; [RQ_AD_MANAGER loadAdWithAdType:RQADType_HomePage_native customView:view]; } return _headerView; } - (SDCycleScrollView *)cycleScrollView { if (!_cycleScrollView) { _cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(16, 0, (RQ_SCREEN_WIDTH - 32.f), self.cycleScrollViewHeight) imageNamesGroup:@[@"cycleScrollViewPlaceholderImage"]]; _cycleScrollView.autoScrollTimeInterval = 5; _cycleScrollView.placeholderImage = RQImageNamed(@"cycleScrollViewPlaceholderImage"); _cycleScrollView.layer.cornerRadius = 10; _cycleScrollView.clipsToBounds = YES; } return _cycleScrollView; } - (NSArray *)titles { return @[@"C1/C2/C3\n轿车", @"A1/A3/B1\n客车", @"A2/B2\n货车", @"D/E/F\n摩托车"]; } - (NSArray *)imagesArr { return @[@"car", @"bus", @"truck", @"motorcycle"]; } - (float)cycleScrollViewHeight { return (100.f / 375.f) * (RQ_SCREEN_WIDTH); } @end