处理kbpayvip

This commit is contained in:
2026-02-04 12:33:01 +08:00
parent 305326aa9a
commit 68a610e0a8
11 changed files with 470 additions and 100 deletions

View File

@@ -9,6 +9,7 @@
#import "UIImage+KBColor.h"
#import "KBTopImageButton.h"
#import "KBVipPay.h"
#import "KBPayMainVC.h"
@interface HomeHeadView()
@@ -174,7 +175,7 @@
[[KBUserSessionManager shared] goLoginVC];
return;
}
KBVipPay *vc = [[KBVipPay alloc] init];
KBPayMainVC *vc = [[KBPayMainVC alloc] init];
[KB_CURRENT_NAV pushViewController:vc animated:true];
}

View File

@@ -11,10 +11,10 @@
// 便 KB_NAV_TOTAL_HEIGHT
@property (nonatomic, strong) UIView *containerView;
// pay_vip_icon
@property (nonatomic, strong) UIImageView *vipImageView;
@property (nonatomic, strong) UIImageView *wanImageView;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *desLabel;
//@property (nonatomic, strong) UIImageView *vipImageView;
//@property (nonatomic, strong) UIImageView *wanImageView;
//@property (nonatomic, strong) UILabel *titleLabel;
//@property (nonatomic, strong) UILabel *desLabel;
//
@property (nonatomic, strong) UIImageView *aiImageView;
@@ -34,32 +34,6 @@
make.edges.equalTo(self);
}];
// 1.
[self.containerView addSubview:self.vipImageView];
[self.vipImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.left.equalTo(self.containerView).inset(KBFit(27));
make.top.equalTo(self.containerView).offset(KB_NAV_TOTAL_HEIGHT + 25);
make.height.mas_equalTo((269));
}];
[self.containerView addSubview:self.wanImageView];
[self.wanImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.left.equalTo(self.containerView);
make.top.equalTo(self.vipImageView).offset(70);
make.bottom.equalTo(self.containerView).offset(-16);
}];
[self.containerView addSubview:self.titleLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.containerView);
make.top.equalTo(self.wanImageView).offset(53);
}];
[self.containerView addSubview:self.desLabel];
[self.desLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.containerView);
make.top.equalTo(self.titleLabel.mas_bottom).offset(10);
}];
// 2.
UIView *g1 = [self gridItemWithImageView:self.aiImageView];
UIView *g2 = [self gridItemWithImageView:self.keyboardImageView];
@@ -72,12 +46,12 @@
CGFloat spacing = 16;
[g1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.vipImageView);
make.top.equalTo(self.desLabel.mas_bottom).offset(18);
make.left.equalTo(self.containerView).inset(KBFit(27));
make.top.equalTo(self.containerView).offset(KB_NAV_TOTAL_HEIGHT + 25);
make.height.mas_equalTo(((KBFit(122))));
}];
[g2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.vipImageView);
make.right.equalTo(self.containerView).inset(KBFit(27));
make.top.equalTo(g1);
make.height.equalTo(g1);
make.left.equalTo(g1.mas_right).offset(spacing);
@@ -90,7 +64,7 @@
make.width.equalTo(g1);
}];
[g4 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.vipImageView);
make.right.equalTo(g2);
make.top.equalTo(g3);
make.left.equalTo(g3.mas_right).offset(spacing);
make.height.equalTo(g1);
@@ -144,21 +118,7 @@
return _containerView;
}
- (UIImageView *)vipImageView {
if (!_vipImageView) {
_vipImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_vip_icon"]];
_vipImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _vipImageView;
}
- (UIImageView *)wanImageView {
if (!_wanImageView) {
_wanImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_wanwhite_icon"]];
_wanImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _wanImageView;
}
- (UIImageView *)aiImageView {
if (!_aiImageView) {
@@ -190,23 +150,4 @@
}
- (UILabel *)titleLabel{
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = @"Become a member of LOVE KEY";
_titleLabel.textColor = [UIColor colorWithHex:KBBlackValue];
_titleLabel.font = [KBFont bold:18];
}
return _titleLabel;
}
- (UILabel *)desLabel{
if (!_desLabel) {
_desLabel = [[UILabel alloc] init];
_desLabel.text = @"Unlock all functions";
_desLabel.textColor = [UIColor colorWithHex:KBBlackValue];
_desLabel.font = [KBFont medium:14];
}
return _desLabel;
}
@end

View File

@@ -0,0 +1,15 @@
//
// PagingViewTableHeaderView.h
// JXCategoryView
//
// Created by jiaxin on 2018/8/27.
// Copyright © 2018年 jiaxin. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface PagingViewTableHeaderView : UIView
- (void)scrollViewDidScroll:(CGFloat)contentOffsetY;
@end

View File

@@ -0,0 +1,88 @@
//
// PagingViewTableHeaderView.m
// JXCategoryView
//
// Created by jiaxin on 2018/8/27.
// Copyright © 2018 jiaxin. All rights reserved.
//
#import "PagingViewTableHeaderView.h"
@interface PagingViewTableHeaderView()
@property (nonatomic, strong) UIImageView *bgImageView; //
@property (nonatomic, strong) UIImageView *vipImageView;
@property (nonatomic, strong) UIImageView *wanImageView;
@end
@implementation PagingViewTableHeaderView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_vipbg_icon"]];
self.bgImageView.contentMode = UIViewContentModeScaleAspectFill;
self.bgImageView.clipsToBounds = true;
[self addSubview:self.bgImageView];
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.equalTo(self);
make.height.mas_equalTo(224);
}];
[self.bgImageView addSubview:self.vipImageView];
[self.vipImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.left.equalTo(self.bgImageView).inset(KBFit(27));
make.top.equalTo(self.bgImageView).offset(KB_NAV_TOTAL_HEIGHT + 25);
make.height.mas_equalTo((269));
}];
[self.bgImageView addSubview:self.wanImageView];
[self.wanImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.left.equalTo(self.bgImageView);
make.top.equalTo(self.bgImageView.mas_bottom).offset(-48);
make.height.mas_equalTo(391);
}];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
}
- (void)scrollViewDidScroll:(CGFloat)contentOffsetY {
}
//- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
// CGFloat targetWidth = layoutAttributes.size.width > 0 ? layoutAttributes.size.width : KB_SCREEN_WIDTH;
// // 便
// self.bounds = CGRectMake(0, 0, targetWidth, self.bounds.size.height);
// [self setNeedsLayout];
// [self layoutIfNeeded];
// CGSize fit = [self systemLayoutSizeFittingSize:CGSizeMake(targetWidth, UILayoutFittingCompressedSize.height)
// withHorizontalFittingPriority:UILayoutPriorityRequired
// verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
// CGRect f = layoutAttributes.frame;
// f.size.height = ceil(fit.height);
// layoutAttributes.frame = f;
// return layoutAttributes;
//}
- (UIImageView *)vipImageView {
if (!_vipImageView) {
_vipImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_vip_icon"]];
_vipImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _vipImageView;
}
- (UIImageView *)wanImageView {
if (!_wanImageView) {
_wanImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_wanwhite_icon"]];
_wanImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _wanImageView;
}
@end

View File

@@ -0,0 +1,16 @@
//
// KBPayMainVC.h
// keyBoard
//
// Created by Mac on 2026/2/3.
//
#import "BaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface KBPayMainVC : BaseViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,210 @@
//
// KBPayMainVC.m
// keyBoard
//
// Created by Mac on 2026/2/3.
//
#import "KBPayMainVC.h"
#import "JXPagerView.h"
#import "KBShopHeadView.h"
#import <JXCategoryView/JXCategoryView.h>
#import "KBCategoryTitleView.h"
#import <JXPagingView/JXPagerView.h>
#import <MJRefresh/MJRefresh.h>
//#import "KBShopItemVC.h"
#import "KBVipPay.h"
#import "KBPaySvipVC.h"
#import "KBSearchVC.h"
#import "MySkinVC.h"
#import "JXPagerView.h"
#import "PagingViewTableHeaderView.h"
#import "JXCategoryTitleView.h"
static const CGFloat JXTableHeaderViewHeight = 224;
static const CGFloat JXheightForHeaderInSection = 50;
@interface KBPayMainVC ()<JXCategoryViewDelegate,JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate>
@property (nonatomic, strong) JXPagerView *pagerView;
@property (nonatomic, strong) PagingViewTableHeaderView *userHeaderView;
@property (nonatomic, strong, readonly) JXCategoryTitleView *categoryView;
@property (nonatomic, assign) BOOL isNeedFooter;
@property (nonatomic, assign) BOOL isNeedHeader;
- (JXPagerView *)preferredPagingView;
@property (nonatomic, strong) NSArray <NSString *> *titles;
@property (nonatomic, strong) UIView *naviBGView;
@property (nonatomic, strong) UIButton *closeButton; //
@end
@implementation KBPayMainVC
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.navigationController.navigationBar.translucent = false;
self.edgesForExtendedLayout = UIRectEdgeNone;
// self.kb_navView.hidden = true;
_titles = @[@"VIP", @"SVIP"];
_userHeaderView = [[PagingViewTableHeaderView alloc] init];
_categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, JXheightForHeaderInSection)];
self.categoryView.titles = self.titles;
self.categoryView.backgroundColor = [UIColor whiteColor];
self.categoryView.delegate = self;
self.categoryView.titleSelectedColor = [UIColor colorWithRed:105/255.0 green:144/255.0 blue:239/255.0 alpha:1];
self.categoryView.titleColor = [UIColor blackColor];
self.categoryView.titleColorGradientEnabled = YES;
self.categoryView.titleLabelZoomEnabled = YES;
self.categoryView.contentScrollViewClickTransitionAnimationEnabled = NO;
JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
lineView.indicatorColor = [UIColor colorWithRed:105/255.0 green:144/255.0 blue:239/255.0 alpha:1];
lineView.indicatorWidth = 30;
self.categoryView.indicators = @[lineView];
_pagerView = [self preferredPagingView];
self.pagerView.mainTableView.gestureDelegate = self;
[self.view addSubview:self.pagerView];
self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
//
// [self.pagerView.listContainerView.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
// [self.pagerView.mainTableView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
self.automaticallyAdjustsScrollViewInsets = NO;
CGFloat naviHeight = KB_NAV_TOTAL_HEIGHT;
self.pagerView.pinSectionHeaderVerticalOffset = naviHeight;
self.naviBGView = [[UIView alloc] init];
self.naviBGView.alpha = 0;
self.naviBGView.backgroundColor = [UIColor whiteColor];
self.naviBGView.frame = CGRectMake(0, 0, self.view.bounds.size.width, naviHeight);
[self.view addSubview:self.naviBGView];
UILabel *naviTitleLabel = [[UILabel alloc] init];
naviTitleLabel.text = @"导航栏隐藏";
naviTitleLabel.textAlignment = NSTextAlignmentCenter;
naviTitleLabel.frame = CGRectMake(0, KB_STATUSBAR_HEIGHT, self.view.bounds.size.width, 44);
[self.naviBGView addSubview:naviTitleLabel];
// UIButton *back = [UIButton buttonWithType:UIButtonTypeSystem];
// [back setTitle:@"返回" forState:UIControlStateNormal];
// back.frame = CGRectMake(12, KB_STATUSBAR_HEIGHT, 44, 44);
// [back addTarget:self action:@selector(backButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
// [self.naviBGView addSubview:back];
[self.view addSubview:self.closeButton];
[self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(KB_NAV_TOTAL_HEIGHT - 30);
make.left.equalTo(self.view).offset(15);
make.width.height.mas_equalTo(36);
}];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
- (JXPagerView *)preferredPagingView {
return [[JXPagerView alloc] initWithDelegate:self];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.pagerView.frame = self.view.bounds;
}
#pragma mark - JXPagerViewDelegate
- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
return self.userHeaderView;
}
- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
return JXTableHeaderViewHeight;
}
- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
return JXheightForHeaderInSection;
}
- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
return self.categoryView;
}
- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
//categoryViewitem
return self.categoryView.titles.count;
}
- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
if (index == 0) {
KBVipPay *list = [[KBVipPay alloc] init];
return list;
}
KBPaySvipVC *list = [[KBPaySvipVC alloc] init];
return list;
}
#pragma mark - JXCategoryViewDelegate
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
}
#pragma mark - JXPagerMainTableViewGestureDelegate
- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
//categoryView
if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
return NO;
}
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
- (void)pagerView:(JXPagerView *)pagerView mainTableViewDidScroll:(UIScrollView *)scrollView {
CGFloat thresholdDistance = 100;
CGFloat percent = scrollView.contentOffset.y/thresholdDistance;
percent = MAX(0, MIN(1, percent));
self.naviBGView.alpha = percent;
}
#pragma mark - Action
- (void)onTapClose{
[[KBMaiPointReporter sharedReporter] reportClickWithEventName:@"click_vip_close_btn"
pageId:@"vip_pay"
elementId:@"close_btn"
extra:nil
completion:nil];
[self.navigationController popViewControllerAnimated:true];
}
#pragma mark - lazy
- (UIButton *)closeButton {
if (!_closeButton) {
_closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_closeButton setImage:[UIImage imageNamed:@"close_white2_icon"] forState:UIControlStateNormal];
[_closeButton addTarget:self action:@selector(onTapClose) forControlEvents:UIControlEventTouchUpInside];
}
return _closeButton;
}
@end

View File

@@ -0,0 +1,17 @@
//
// KBPaySvipVC.h
// keyBoard
//
// Created by Mac on 2026/2/3.
//
#import "BaseViewController.h"
#import <JXPagingView/JXPagerView.h>
NS_ASSUME_NONNULL_BEGIN
@interface KBPaySvipVC : UIViewController<JXPagerViewListViewDelegate>
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,58 @@
//
// KBPaySvipVC.m
// keyBoard
//
// Created by Mac on 2026/2/3.
//
#import "KBPaySvipVC.h"
@interface KBPaySvipVC ()<UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView);
@property (nonatomic, strong) UICollectionView *collectionView;
@end
@implementation KBPaySvipVC
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// collectionView
[self.view addSubview:self.collectionView];
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view); // mas
}];
}
#pragma mark - UIScrollView Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
!self.scrollCallback ?: self.scrollCallback(scrollView);
}
#pragma mark - JXPagingViewListViewDelegate
- (UIView *)listView { return self.view; }
- (UIScrollView *)listScrollView { return self.collectionView; }
- (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { self.scrollCallback = callback; }
- (void)listWillAppear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listDidAppear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listWillDisappear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listDidDisappear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
#pragma mark - Lazy
- (UICollectionView *)collectionView {
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_collectionView.backgroundColor = [UIColor clearColor];
// _collectionView.dataSource = self;
// _collectionView.delegate = self;
// cell
// [_collectionView registerClass:KBSkinCardCell.class forCellWithReuseIdentifier:@"KBSkinCardCell"]; //
}
return _collectionView;
}
@end

View File

@@ -6,11 +6,12 @@
//
#import <UIKit/UIKit.h>
#import <JXPagingView/JXPagerView.h>
NS_ASSUME_NONNULL_BEGIN
/// VIP 订阅页(整体使用 UICollectionView上下滚动
@interface KBVipPay : BaseViewController
@interface KBVipPay : BaseViewController<JXPagerViewListViewDelegate>
/// 通过键盘深链配置初始商品及是否自动发起购买
- (void)configureWithProductId:(nullable NSString *)productId

View File

@@ -20,10 +20,11 @@ static NSString * const kKBVipSubscribeCellId = @"kKBVipSubscribeCellId";
static NSString * const kKBVipReviewListCellId = @"kKBVipReviewListCellId";
@interface KBVipPay () <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView);
@property (nonatomic, strong) UICollectionView *collectionView; //
@property (nonatomic, strong) NSArray<KBPayProductModel *> *plans; //
@property (nonatomic, assign) NSInteger selectedIndex; //
@property (nonatomic, strong) UIButton *closeButton; //
@property (nonatomic, strong) UIButton *restoreButton;
@property (nonatomic, strong) UIImageView *bgImageView; //
// Header
@@ -90,16 +91,10 @@ static NSString * const kKBVipReviewListCellId = @"kKBVipReviewListCellId";
make.top.equalTo(self.view).offset(0);
make.bottom.equalTo(self.payButton.mas_top).offset(-16);
}];
[self.view addSubview:self.closeButton];
[self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(KB_NAV_TOTAL_HEIGHT - 30);
make.left.equalTo(self.view).offset(15);
make.width.height.mas_equalTo(36);
}];
[self.view addSubview:self.restoreButton];
[self.restoreButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.closeButton);
make.right.equalTo(self.view).offset(-15);
make.top.equalTo(self.view).offset(KB_NAV_TOTAL_HEIGHT - 30); make.right.equalTo(self.view).offset(-15);
make.width.mas_equalTo(123);
make.height.mas_equalTo(32);
}];
@@ -292,14 +287,14 @@ static NSString * const kKBVipReviewListCellId = @"kKBVipReviewListCellId";
}
#pragma mark - Action
- (void)onTapClose{
[[KBMaiPointReporter sharedReporter] reportClickWithEventName:@"click_vip_close_btn"
pageId:@"vip_pay"
elementId:@"close_btn"
extra:nil
completion:nil];
[self.navigationController popViewControllerAnimated:true];
}
//- (void)onTapClose{
// [[KBMaiPointReporter sharedReporter] reportClickWithEventName:@"click_vip_close_btn"
// pageId:@"vip_pay"
// elementId:@"close_btn"
// extra:nil
// completion:nil];
// [self.navigationController popViewControllerAnimated:true];
//}
#pragma mark - Bottom Actions
- (void)onTapPayButton {
@@ -495,14 +490,7 @@ static NSString * const kKBVipReviewListCellId = @"kKBVipReviewListCellId";
}
- (UIButton *)closeButton {
if (!_closeButton) {
_closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_closeButton setImage:[UIImage imageNamed:@"close_white2_icon"] forState:UIControlStateNormal];
[_closeButton addTarget:self action:@selector(onTapClose) forControlEvents:UIControlEventTouchUpInside];
}
return _closeButton;
}
- (UIButton *)restoreButton {
if (!_restoreButton) {
@@ -575,4 +563,21 @@ static NSString * const kKBVipReviewListCellId = @"kKBVipReviewListCellId";
[layout invalidateLayout];
}
}
#pragma mark - UIScrollView Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
!self.scrollCallback ?: self.scrollCallback(scrollView);
}
#pragma mark - JXPagingViewListViewDelegate
- (UIView *)listView { return self.view; }
- (UIScrollView *)listScrollView { return self.collectionView; }
- (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { self.scrollCallback = callback; }
- (void)listWillAppear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listDidAppear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listWillDisappear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listDidDisappear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
@end