美文网首页UI
关于iOS的UIPageViewController的问题

关于iOS的UIPageViewController的问题

作者: 子_夜 | 来源:发表于2019-06-05 13:27 被阅读0次

    首先是关闭UIPageViewControllerpageCurl模式下的点击翻页.

    获取UIPagecontroller里的手势, 并设置代理.

            for gr in pageViewController.view?.gestureRecognizers ?? [] {
                if gr.isKind(of: UITapGestureRecognizer.self) {
                    gr.delegate = self
                }
            }
    

    添加手势代理

        func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
            if gestureRecognizer.isKind(of: UITapGestureRecognizer.self) {
                return false
            }
            return true
        }
    

    上面是可以取消pageCurl模式下的点击翻页

    另外一个问题是UIPageViewController里是UITableView的问题.

    就是上下滑动UITableView的时候, UIPageViewController会自动执行这个数据源方法.

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            if index <= 0 {
                return nil
            }
            return viewController
        }
    

    没有任何动画效果,再往后翻页会出现空白页.

    要解决这个问题可以把上面的手势代理设置改成下面这样, 也设置UIPanGestureRecognizer的代理.

            for gr in pageViewController.view?.gestureRecognizers ?? [] {
                gr.delegate = self
            }
    

    但这样会导致另外一个问题, 就是在第一页和最后一页的时候再滑动, 如果数据源方法返回的控制器为nil, 就会崩溃
    要解决这个问题需要执行手势的另外一个代理方法.

    func gestureRecognizerShouldBegin(_ gestureeRcognizer: UIGestureRecognizer) -> Bool {
            //判断是否是 UIPanGestureRecognizer 手势
            if gestureeRcognizer.isKind(of: UIPanGestureRecognizer.self) {
                //获取手势滑动的偏移量
                let translation = (gestureeRcognizer as! UIPanGestureRecognizer).translation(in: pageViewController.view)
    
                if translation.x < 0 {
                    //如果是最后一页, 向左滑动的时候就 
                    return false
                } else {
                    //如果是第一页, 向右滑动的时候就 
                    return false
                }
    
                if translation.y < 0 {
                    //向上滑动
                } else {
                    //向下滑动
                }
      
            }
            return true
        }
    

    这样就可以解决刚才的问题了.

    相关文章

      网友评论

        本文标题:关于iOS的UIPageViewController的问题

        本文链接:https://www.haomeiwen.com/subject/kuvjxctx.html