UIPageViewController 和 UIScrollView
Posted
技术标签:
【中文标题】UIPageViewController 和 UIScrollView【英文标题】:UIPageViewController and UIScrollView 【发布时间】:2012-03-21 04:40:44 【问题描述】:我有一个视图控制器,它是 UIPageViewController 的一部分。在这个视图控制器中,有一个名为pdfView
的视图。这个视图有一个 UIScrollview。
-UIPageViewController
-UIViewController
-pdfView (UIView)
-UIScrollView
我将pdfView
的手势识别器设置为 UIPageViewController 的手势识别器(用于翻页)。唯一的问题是,如果用户通过捏合来放大滚动视图,他们将无法移动到滚动视图的右侧或左侧,因为页面会翻转。你建议我做些什么来防止这种情况发生?谢谢。
pdfView.gestureRecognizers = self.pageViewController.gestureRecognizers;
【问题讨论】:
设置视图控制器的gestureRecognizers而不是pdfView的在某种程度上解决了这个问题(可以在整个UIScrollView中移动),但用户无法滑动翻页(代码:viewController.view.gestureRecognizers = . ..) 【参考方案1】:我知道我的答案是被接受的,但我尝试将我的 UIView 更改为 scrollView 并且效果更好。
当我缩放页面时,该页面的浏览手势停止工作,因此我可以放大和缩小,并平移缩放后的图像而不会出现问题,当我缩放到初始比例时,页面手势再次开始工作自动。
我的 dataViewController 中有视图、全屏 scrollerView 和滚动视图内的全屏 imageView。
-UIPageViewController
-UIViewController
-UIView
-UIScrollView
-UIImageView
因此,如果您想在页面缩放时更改页面,您可以选择平移缩放页面或使用平移手势更改页面。 这是我一直在寻找的行为,在我的代码中我手动执行,但我将更改为 UIScrollView,因为 UIScrollView 平移和捏合手势比我的要好得多。
【讨论】:
我也有同样的问题。您能否介绍一下您是如何使用 UIScrollView 实现您的解决方案的? 我只是按照我说的做了,它没有任何改变就可以工作。但它是每个页面的滚动视图,因此如果您处于 2 页模式,则可以单独缩放页面。只需在每个页面使用的 viewController 的视图中放置一个 UIScrollView。【参考方案2】:试试这个, 而是使用滚动视图使用常规 UIView 向这个新的 UIView 添加一个 UIPinchGestureRecognizer 来缩放它和一个 UIPanGestureRecognizer 来移动内容。 (你必须创建捏和平移动作,但你可以用谷歌搜索)
我做了类似的事情并且工作,唯一的问题是有时它检测到页面滑动而不是视图平移,您可以解决强制平移需要 2 次触摸。
如果您有任何疑问,请告诉我
【讨论】:
【参考方案3】:我制作了这个库,使这个设置工作
-UIPageViewController
-UIViewController
-UIView
-UIScrollView
-UIImageView
https://github.com/holyman2k/WXPagedPhotoView
我唯一的问题是当用户缩放照片时,pageviewcontroller 平移手势被禁用,直到用户滚动边缘并重新开始平移。你有这种奇怪的行为,用户放大照片,滚动到最右边,然后滚动停止,然后用户再次滚动以移动到下一页
【讨论】:
以上是关于UIPageViewController 和 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
Swift pagecontroller 故事板 UI 对象与 UIPageviewcontroller 连接
UIPageViewController -presentationCount 不触发
如何更改 UIPageViewController 中的按钮名称
iOS6 自动旋转 - UIPageViewController