Restrict UIPageViewController (with TransitionStyleScroll) pan gesture to a certain area

徘徊边缘 提交于 2019-12-01 17:34:04

I do it by subclassing the UIPageViewController, finding its UIScrollView (iterate self.subviews), and adding a new UIPanGestureRecognizer to that scrollView.

I set my subclassed UIPageViewController to be the delegate of that new UIPanGestureRegognizer. I then implement two delegate methods:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
  return NO;
}

and in

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

I decide if I want to "eat the event" (reply YES) or if I want the original UIPanGestureViewRecognizer of the UIScrollView to handle it (reply NO). So, the YES-reply means the UIPageViewController will not scroll to the next ViewController.

My solution in Swift:

let myview = UIView(frame: CGRect(x:0, y:0, width:320, height:320))
//dummy view that defines the area where the gesture works
self.view.addSubview(myview)

for x in self.pageViewController!.view.subviews 
{ if x is UIScrollView
  { myview.addGestureRecognizer(x.panGestureRecognizer) } 
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!