【发布时间】:2015-08-04 12:02:59
【问题描述】:
所以我创建了一个 UIPageViewController,它的工作方式与我想要的一样,除了一件事。如果我在屏幕上快速滑动手指,页面会向任一侧滚动一个位置,然后弹跳并再次显示下一页的 3/4 厘米。像这样:
零页 || (current)第一页 --> 滚动到第二页 -->浏览第三页
但是,第三页还没有加载,因为这个函数只在当前一个的两侧预加载一个 ViewController,而不是两个,所以在我的例子中,它会预加载页面零和第二,而不是三个,因此创建一个白色的一瞥,直到我打算从第二页滚动到那里。
预加载周边页面的方法:
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
我该如何解决这个问题??
编辑:
我像这样在 UIPageViewController 中声明我的 ViewControllers:
NSMutableArray *_viewControllers;
然后我像这样填充数组:
_viewControllers = [NSMutableArray new];
for (MyModel *currentObject in _myObjects)
{
MyViewController *page = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerID"];
// setup page with variables
[_viewControllers addObject:page]; // add the page to the viewControllers array
}
然后这些是委托方法:
-(UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
return _viewControllers[index];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger currentIndex = [_viewControllers indexOfObject:viewController];
if (currentIndex > 0) { currentIndex--; } else { currentIndex = ([_viewControllers count] - 1); }
return [_viewControllers objectAtIndex:currentIndex];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger currentIndex = [_viewControllers indexOfObject:viewController];
if (currentIndex < ([_viewControllers count] - 1)) { currentIndex++; } else { currentIndex = 0; }
return [_viewControllers objectAtIndex:currentIndex];
}
-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return _viewControllers.count;
}
-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return 0;
}
MyModel 只是我为用数据填充 ViewControllers 而构建的一个类
谢谢!
【问题讨论】:
-
一些实际代码将帮助我们识别问题。
-
@Tander 请查看更新后的问题
-
你设置了滚动的过渡风格吗?
-
@tikider 我有,是的
-
你在哪里使用 -(UIViewController *)viewControllerAtIndex:(NSUInteger)index;代表不需要它
标签: ios objective-c uiview uiviewcontroller uipageviewcontroller