- 让横向页面切换更流畅顺滑,解决非相邻页面切换时带来的快速略过问题
- 避免非相邻页面动画切换时创建非目标页面view造成的性能损耗
- 可直接设置初始化目标位置
- 支持无动画的直接页面切换
- 使用快速构建类方法创建并设置代理
sp_delegate
// # How to use #
CGSize screenSize = [UIScreen mainScreen].bounds.size;
SPScrollPageView *pageView = [SPScrollPageView scrollPageViewWithPageCount:5
initialIndex:3
frame:(CGRect){CGPointZero,screenSize}];
pageView.sp_delegete = self;
[self.view addSubview:pageView];
pageCount
:总页面数
initialIndex
:初始化页面所处的位置(0开始)
- 在代理方法中根据位置创建并返回目标View
- (UIView *)scrollPageView:(SPScrollPageView *)pageView pageForIndex:(NSInteger)index{
UIView *view = [pageView dequeuePageViewWithIndex:index];
if (!view) {
if (index) {
view = self.subscribed;
}else{
view = self.news;
}
}
return view;
}
- 在代理方法中,获知当前显示的位置及View
- (void)scrollPageDidEndBounceAtPage:(UIView *)stillPage index:(NSInteger)index
{
NSLog(@"Current page number:%ld",index);
}
在这里,你可以控制页面的刷新,更新导航条位置等操作
- 跳转,直接使用
- (void)jumpImmediatelyToIndex:(NSInteger)index animated:(BOOL)animated;
index
:目标位置animated
:是否使用动画
pod 'SPScrollPageView' ,'~> 0.0.3'
- 直接将Gayhub上项目中的SPScrollPageView文件夹拖入工程
Gayhub:SPScrollPageView 求个star ^-^
- 继承自
UIScrollView
- 设置
pagingEnabled
为YES
,用于切换分页效果的实现 - 借鉴
UITableview
的复用机制,只创建两个Cell
用于承载数据源中获取的View
,避免在滚动时出现无意义的视图创建 - 根据位置缓存视图,管理展示视图,无需在
Controller
中进行冗余的处理 - 使用
KVO
监听contentOffset
的变化,控制页面的复用及相关数据的更新。这里多说一点,很多情况下利用现有的UIScrollView
的delegate
可以更容易获悉相关状态,但是笔者没有这么做,为什么呢?假如我们过分依赖原生代理方法,一但使用者想使用相关代理方法去重新设置了delegate
,那么功能一定会出现问题。 - 使用
UIScrollView
的panGestureRecognizer
,结合第5条,监听处理手指拖动页面时的变化
作为新年节后的恢复轮子,肯定有不妥或者不足的地方。如果大佬有任何意见,或者发现任何不足,希望大佬能留言或issue拍砖,野生鶸鸡在此拜谢
“愿**青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。”