And, it was interesting why no one pointed out this error, which I took almost 2 nights to find out the solution.
OLD CODE (iOS 5.1): When you return nil on the first and last page, you will encounter an application crash. It works fine in iOS 5.1, but in iOS 6 it won't.
- (UIViewController *)pageViewController: (UIPageViewController *)pageViewController viewControllerBeforeViewController: (UIViewController *)viewController { for (UIGestureRecognizer *recognizer in pageController.gestureRecognizers) { if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) { recognizer.enabled = NO; } } NSUInteger index = [self indexOfViewController: (MainViewController *)viewController]; if ((index == 0) || (index == NSNotFound)) { return nil; } index--; return [self viewControllerAtIndex:index]; } - (UIViewController *)pageViewController: (UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { for (UIGestureRecognizer *recognizer in pageController.gestureRecognizers) { if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) { recognizer.enabled = NO; } } NSUInteger index = [self indexOfViewController: (MainViewController *)viewController]; if (index == NSNotFound) { return nil; } }
SOLUTION (iOS 6): adding the gesture effect to the supervisor, just call the delegate named - (BOOL) gestureRecognizerShouldBegin: (UIGestureRecognizer *) gestureRecognizer. What I did is very simple, calculating the user's speed, turning the first page and the last page (I mean using the gesture recognizer), I denied scrolling. All you have to do is simply paste the following code and you MUST !.
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if (pageNum==0) { if ([(UIPanGestureRecognizer*)gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [(UIPanGestureRecognizer*)gestureRecognizer velocityInView:gestureRecognizer.view].x > 0.0f) { //NSLog(@"Swiping to left on 1st page is denied"); return NO; } if ([(UITapGestureRecognizer*)gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && [(UITapGestureRecognizer*)gestureRecognizer locationInView:gestureRecognizer.view].x < self.view.frame.size.width/2) { //NSLog(@"tapping to left on 1st page is denied"); return NO; } } else if(pageNum ==totalNoOfFiles-1) { if ([(UIPanGestureRecognizer*)gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [(UIPanGestureRecognizer*)gestureRecognizer velocityInView:gestureRecognizer.view].x < 0.0f) { //NSLog(@"Swiping to right on 1st page is denied"); return NO; } if ([(UITapGestureRecognizer*)gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && [(UITapGestureRecognizer*)gestureRecognizer locationInView:gestureRecognizer.view].x > self.view.frame.size.width/2) { //NSLog(@"Tapping to right on 1st page is denied"); return NO; } } return YES; } - (UIViewController *)pageViewController:(UIPageViewController*) pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { int index = [self indexOfViewController:(ChildViewController *)viewController]; index--; return [self viewControllerAtIndex:index]; } - (UIViewController *)pageViewController: (UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { int index = [self indexOfViewController:(ChildViewController *)viewController]; index++; return [self viewControllerAtIndex:index]; }
Master Stroke Oct 08 2018-12-12T00: 00Z
source share