ios - UIPageViewController 以编程方式进行中间转换?

标签 ios objective-c swift uipageviewcontroller

我有一个包含 n (n>>2) 个页面的 UIPageViewController。第一页是黄色的,第二页是蓝色的。当我从一个页面拖到另一个页面时,我得到了一个很好的中间状态动画,如下图所示:

enter image description here

我试图以编程方式实现从一个页面到另一个页面的页面转换。我得到了 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

结果如下:

enter image description here

滚动位置已更新,但未加载下一个 View 。这就是为什么在正确的站点上有一个白色区域。我知道我可以使用 setViewControllers 设置下一页,但这会显示整个下一页。我在这里想要的是以编程方式仅部分显示下一页,就像我在拖动时所做的那样。

我知道这是可以做到的,因为 Tinder 应用程序已经在这样做了。当您在页眉上做出平移手势时,页面 View Controller 会非常流畅地切换页面。

enter image description here

如何以编程方式模拟页面中间转换?

最佳答案

您不能在被分页 的事情上中途停下来。只要 拖动 手势处于事件状态,它就可以实现,但是一旦您抬起手指并且该手势停止,控件将显示下一个 UIViewController 或已经呈现的那个。

使用 setViewControllersanimated:true将从当前 UIViewController 平滑过渡到下一个 UIViewController,就像您用手指拖动 View 一样:

.setViewControllers([allViewControllers[1]], direction: .Forward, animated: true, completion: nil)

如果您想要更自定义的内容,您可能需要使用 UIScrollView 而不是 UIPageViewController,并自行设置内容。设置 pagingEnabledtrue将使它表现得像一个带有 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/

相关文章:

ios - __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 18 23 CoreFoundation 崩溃

ios - 在react-native-maps中动画结束后调用函数

objective-c - NSAlert 调整窗口大小

ios - 设置 AudioUnit 混响的参数?

ios - SmartSVN:如何从主干分支出工作副本

objective-c - NSWindow 标题栏右半部分不可拖动

ios - 管理具有不同设置和名称的开发、测试和生产构建的最佳方式

javascript - -[UIAlertController addTextFieldWithConfigurationHandler :] 中的断言失败

swift - 在 Swift 中继承泛型类失败

ios - 尝试在 UICollectionViewCell 类上使用照片库