iOS UIPageViewController阅读器翻页逻辑

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

最近在做阅读器,使用原生控件UIPageViewController是发现翻页逻辑是不能通过dataSource中的before和after代理来控制的,因为如果从里头拿index,这个index在PageVC内部并不是和翻页逻辑一致的.

  • 所以我采取在willTransitionTo代理中来处理翻页逻辑
    需要注意的是,并不是每一个翻页动作都会出发翻页逻辑,只要dataSource提供正确数据就行,没必要保证每个翻页动作都触发翻页逻辑.
  • 但是在触发翻页动作时必须保证翻页逻辑的正确. 所以每一个翻页动作细分为6中情况, 分别是
    同章下翻
    末页下翻
    首页下翻
    同章上翻
    末页上翻
    首页上翻
    这6种情况的判断逻辑各不相同,可能有人会有更加优秀的写法,反正我就用土办法if else if写了.
  • 大致代码如下,代码中的pageChap对象和cp_will和cp_down对象都是同一个类,表示当前页的内容模型与页码信息.
//翻页即将开始
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers{
    @weakify(self)
    self.dataControl.isPaging = YES;
    [pendingViewControllers enumerateObjectsUsingBlock:^(UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        @strongify(self)
        RenderVC *render = (RenderVC *)obj;
        BookChapPage *cp = render.chapPage;
        self.cp_Will = cp;
        NSLog(@"翻页开始%ld",cp.chapIndex);
        NSLog(@"willCount:%ld, downCount:%ld",self.cp_Will.pageCount,self.cp_down.pageCount);
        NSLog(@"cpIndex:%ld,cpDown:%ld",cp.chapIndex,self.cp_down.chapIndex);
        
        
        //同章下翻
        if (self.cp_Will.pageCount > self.cp_down.pageCount && cp.chapIndex == self.cp_down.chapIndex) {
            self.page_dt = Page_Direct_Forward;
        }
        //末页下翻
        else if (self.cp_Will.pageCount == 1 && cp.chapIndex > self.cp_down.chapIndex) {
            self.page_dt = Page_Direct_Forward;
        }
        //首页下翻
        else if (self.cp_down.pageCount == self.cp_down.totalCount && cp.chapIndex > self.cp_down.chapIndex) {
            self.page_dt = Page_Direct_Forward;
        }
        //末页上翻
        else if (self.cp_Will.pageCount == self.cp_Will.totalCount-1 && cp.chapIndex < self.cp_down.chapIndex) {
            self.page_dt = Page_Direct_Back;
        }
        //同章上翻
        else if (self.cp_Will.pageCount < self.cp_down.pageCount && cp.chapIndex == self.cp_down.chapIndex) {
            self.page_dt = Page_Direct_Back;
        }
        //首页上翻
        else if (self.cp_Will.pageCount == self.cp_Will.totalCount && cp.chapIndex < self.cp_down.chapIndex) {
            self.page_dt = Page_Direct_Back;
        }
        else{
            
        }
        [self pageChap:cp direction:self.page_dt];

    }];
}

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术狗|博客
原文地址:《iOS UIPageViewController阅读器翻页逻辑》 发布于2019-10-09

分享到:
赞(0)

评论 抢沙发

1 + 2 =


iOS UIPageViewController阅读器翻页逻辑

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录