UIPageViewController检测平移手势

时间:2015-03-09 18:46:28

标签: ios uipageviewcontroller uipangesturerecognizer

有没有办法在向左/向右滑动时确定UIPageViewController的平移位置?我一直试图做到这一点,但它不起作用。我有一个UIPageViewController作为子视图添加,我可以左右水平滑动以在页面之间切换但是我需要确定我在屏幕上平移的位置的x,y坐标。

2 个答案:

答案 0 :(得分:3)

我想出了如何做到这一点。基本上,UIPageViewController使用UIScrollViews作为其子视图。我创建了一个循环并设置了所有UIScrollViews的子视图,并将其委托分配给了我的ViewController。

/**
 *  Set the UIScrollViews that are part of the UIPageViewController to delegate to this class,
 *  that way we can know when the user is panning left/right
 */
-(void)initializeScrollViewDelegates
{
    UIScrollView *pageScrollView;
    for (UIView* view in self.pageViewController.view.subviews){
        if([view isKindOfClass:[UIScrollView class]])
        {
            pageScrollView = (UIScrollView *)view;
            pageScrollView.delegate = self;
        }
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"Im scrolling, yay!");
}

答案 1 :(得分:2)

我个人的偏好不是过分依赖于PageViewController的内部结构,因为它可以在以后更改,这会破坏你的代码,而你却不知道。

我的解决方案是使用平移手势识别器。在viewDidLoad内,添加以下内容:

let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handler))
gestureRecognizer.delegate = yourDelegate
view.addGestureRecognizer(gestureRecognizer)

yourDelegate的定义中,您应该实施以下方法,以允许您的手势识别器处理触摸

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

现在,您应该能够访问用户触摸的X / Y位置:

func handler(_ sender: UIPanGestureRecognizer) {
    let totalTranslation = sender.translation(in: view)
    //...
}