UIPageViewController 缓存
Posted
技术标签:
【中文标题】UIPageViewController 缓存【英文标题】:UIPageViewController caching 【发布时间】:2014-06-04 10:01:14 【问题描述】:我有一个带有动态变化数据源的 UIPageViewController -
viewControllerAfterViewController
和
viewControllerBeforeViewController
如果数据还没有准备好,则返回 nil,如果数据准备好,则返回视图控制器。如果我尝试在某些时候快速向左翻页多次 viewControllerAfterViewController 将不再被调用。
可能是什么问题?我想 UIPageViewController 认为它知道一切并且什么都没有改变,所以它不调用那个方法,对吗?如何“重置”此缓存?
我使用 curl 过渡样式,这似乎只发生在横向模式下。
【问题讨论】:
【参考方案1】:我最终使用了自己的滑动手势。
首先从 UIPageViewController 中移除现有的滑动手势
for (UIGestureRecognizer * recognizer in _pageViewController.gestureRecognizers)
recognizer.enabled = NO;
然后将你自己的滑动手势识别器添加到 UIPageViewController
UISwipeGestureRecognizer * rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSwipe:)];
[rightRecognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[_pageViewController.view addGestureRecognizer:rightRecognizer];
UISwipeGestureRecognizer * leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSwipe:)];
[leftRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[_pageViewController.view addGestureRecognizer:leftRecognizer];
- (void) handleRightSwipe: (id) sender
// your swipe handler here
// note that you need to call didFinishAnimating manually now
// manually calculate next/prev view controller, also you should consider orientation too
UIViewController * nextController = [_modelController pageViewController:_pageViewController viewControllerAfterViewController:existingController];
__weak typeof(self) weakSelf = self;
__weak UIPageViewController * wController = _pageViewController;
[_pageViewController setViewControllers:@[nextController] direction:
UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL completed)
[weakSelf pageViewController:wController didFinishAnimating:YES previousViewControllers:@[existingController] transitionCompleted:YES];
];
此外,您可以尝试不删除现有的滑动手势,如果现有识别器触发,它看起来不会调用您的自定义滑动手势,这样您在拖动页面角时也有很好的动画(如果您删除所有识别器)。
【讨论】:
以上是关于UIPageViewController 缓存的主要内容,如果未能解决你的问题,请参考以下文章
添加专用 UIViewController(例如 Monotouch 中的 UIPageViewController)的正确方法是啥?
UIPageViewController 缓存和交换具有相似内容的页面的视图层次结构
使用 UIPageViewController 使 UI 滚动视图滚动
Swift pagecontroller 故事板 UI 对象与 UIPageviewcontroller 连接