我正在使用UIPageViewContoller来创建类似书籍的翻页体验。我的书的页面比iPhone屏幕的整个宽度窄18px,并且固定在屏幕的左侧。然后将我的UIPageViewController视图的框架设置为这些页面的框架大小(宽度:302,高度:460)。我这样做是为了让图书有多个页面,并且翻页看起来像是从当前可见页面的边缘开始,就像iBooks应用程序中的体验一样。
我遇到的问题是,如果有人试图通过从屏幕的最右侧进行平移来翻页,超过302 px点,则UIPageViewController不会捕获平移手势并且页面未被翻转。我看过很多用户试图以这种方式翻页,所以我想在不改变UI设计的情况下修复这种体验。
我的想法是我可以从UIPageViewController之外的区域抓取UIPanGesture并将其传递给UIPageViewController。我已经使用我作为整个视图背景的图像视图成功捕获了平移手势,但我无法弄清楚如何将手势传递给UIPageViewController来处理翻页。
- (void) viewDidLoad {
...
// Add a swipe gesture recognizer to grab page flip swipes that start from the far right of the screen, past the edge of the book page
self.panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:nil] autorelease];
[self.panGesture setDelegate:self];
[self.iv_background addGestureRecognizer:self.panGesture];
//enable gesture events on the background image
[self.iv_background setUserInteractionEnabled:YES];
...
}
#pragma mark - UIGestureRecognizer Delegates
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// test if our control subview is on-screen
if (self.pageController.view.superview != nil) {
if (gestureRecognizer == self.panGesture) {
// we touched background of the BookViewController, pass the pan to the UIPageViewController
[self.pageController.view touchesBegan:[NSSet setWithObject:touch] withEvent:UIEventTypeTouches];
return YES; // handle the touch
}
}
return YES; // handle the touch
}
答案 0 :(得分:3)
UIPageViewController有一个gestureRecognizers属性。文档似乎准确描述了您正在寻找的内容:
<强> gestureRecognizers 强>
配置为处理的UIGestureRecognizer对象数组 用户互动。 (只读)
@property(非原子,只读)NSArray * gestureRecognizers
讨论
这些手势识别器最初附加到页面中的视图 查看控制器的层次结构。 更改屏幕区域 用户可以使用手势导航,他们可以放置 另一种观点。
状况
适用于iOS 5.0及更高版本。声明在
UIPageViewController.h