Restrict UIPageViewController (with TransitionStyleScroll) pan gesture to a certain area
cocoa-touch, objective-c, uigesturerecognizer, uipageviewcontroller
Solution
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.
Problem
In my app I have a RootPageViewController which contains the UIPageViewController and one or more DetailPageViewController with a UITableView as a childview. ``` DetailPageViewController / RootPageViewController - DetailPageViewController \ DetailPageViewController ``` On top of every DetailPageViewController is a little space where it should be possible to swipe and get to the next DetailPageViewController. ``` ------------------- | | | | -> UIPageViewController should respond to pan's | | |-------------------| -------------------------------------------- | CellContent | |-------------------| | CellContent | |-------------------| -> UIPageViewController should disable UIPageViewController pan's | CellContent | |-------------------| | ... | ``` In the iOS 7 weather app is a scrollview with the whole weak forecast who somehow overwrites or disables the the pan of the UIPageViewController. How can I recreate such behavior ? Sorry for the missing screenshots