我有一个包含 n (n>>2) 个页面的 UIPageViewController
。第一页是黄色的,第二页是蓝色的。当我从一个页面拖到另一个页面时,我得到了一个很好的中间状态动画,如下图所示:
我试图以编程方式实现从一个页面到另一个页面的页面转换。我得到了 UIScrollView
作为:
for view:UIView in self.view.subviews as! [UIView] {
if view.isKindOfClass(UIScrollView.self) {
self.pageScrollView = view as? UIScrollView
}
}
我这样设置滚动位置:
self.pageScrollView!.contentOffset.x = screenWidth - deltaX
结果如下:
滚动位置已更新,但未加载下一个 View 。这就是为什么在正确的站点上有一个白色区域。我知道我可以使用 setViewControllers
设置下一页,但这会显示整个下一页。我在这里想要的是以编程方式仅部分显示下一页,就像我在拖动时所做的那样。
我知道这是可以做到的,因为 Tinder 应用程序已经在这样做了。当您在页眉上做出平移手势时,页面 View Controller 会非常流畅地切换页面。
如何以编程方式模拟页面中间转换?
最佳答案
您不能在被分页 的事情上中途停下来。只要 拖动 手势处于事件状态,它就可以实现,但是一旦您抬起手指并且该手势停止,控件将显示下一个 UIViewController 或已经呈现的那个。
使用 setViewControllers
与 animated:true
将从当前 UIViewController 平滑过渡到下一个 UIViewController,就像您用手指拖动 View 一样:
.setViewControllers([allViewControllers[1]], direction: .Forward, animated: true, completion: nil)
如果您想要更自定义的内容,您可能需要使用 UIScrollView 而不是 UIPageViewController,并自行设置内容。设置 pagingEnabled
至 true
将使它表现得像一个带有 Scroll
的 UIPageViewController转换,但您也可以禁用分页并使用 setContentOffset:(contentOffset, animated)
的组合使其滚动到您喜欢的位置,委托(delegate) scrollViewWillEndDragging:(scrollView, withVelocity, targetContentOffset)
使其成为“页面”。
我创建了一个 code sample here来说明我的意思。它是一个模仿 UIPageViewController 的简单 UIScrollView,具有基本的 View 分配/取消分配,以及一种以编程方式中途滚动的方法。
关于ios - UIPageViewController 以编程方式进行中间转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30112277/