我有一个包含n(n>>2)页的
结果如下:
UIPageViewController
。第一页是黄色的,第二页是蓝色的。当我从一页拖动到另一页时,我会得到一个漂亮的动画效果,如下图所示:
UIScrollView
:for view:UIView in self.view.subviews as! [UIView] {
if view.isKindOfClass(UIScrollView.self) {
self.pageScrollView = view as? UIScrollView
}
}
The I set the scroll position like this:
self.pageScrollView!.contentOffset.x = screenWidth - deltaX
结果如下:
结果如下:
滚动位置已更新,但下一个视图未加载。这就是为什么右侧有白色区域的原因。我知道可以使用setViewControllers
设置下一页,但这将显示整个下一页。我想要的是像拖动一样部分地以编程方式显示下一页。
我知道这可以做到,因为Tinder应用程序已经在这样做了。当您在标题上进行平移手势时,页面视图控制器会非常流畅地切换页面。
如何在程序中模拟页面中间转换?
scrollViewDidScroll
委托来计算任何给定时间可见的视图。floorf(bounds.origin.x / bounds.size.width)
将为您提供第一个可见视图索引,而ceilf((bounds.origin.x + bounds.size.width) / bounds.size.width)
将为您提供最后一个索引。从父视图中删除不在这些索引之间的所有视图,并添加那些在其中的视图。 - RufelscrollViewDidScroll
中进行某些特定处理,则它可能会很方便,因为即使您使用setContentOffset
以编程方式滚动视图,此回调也会被调用。否则,您可以忽略它。 - RufeltouchEnabled
设置为NO
,然后将其放在 scrollView 上方,这样触摸就会在其中注册(不需要 pan 手势)。否则,它会变得更加复杂,您将不会拥有速度/反弹功能:使用setContentOffset
在平移时不带动画,并在手势结束时找到最接近的偏移量:round(scrollView.contentOffset.x / self.view.bounds.size.width) * self.view.bounds.size.width
,并将其设置为 scrollView 的setContentOffset
(带动画)。 - Rufel