UIPageViewController and UIScrollView

3

我有一个视图控制器,它是UIPageViewController的一部分。在这个视图控制器中,有一个名为pdfView的视图。这个视图有一个UIScrollview。

-UIPageViewController
   -UIViewController
        -pdfView (UIView)
            -UIScrollView

我已将pdfView的手势识别器设置为UIPageViewController的手势识别器(用于翻页)。唯一的问题是,如果用户通过捏合缩放滚动视图,他们将无法向滚动视图的右侧或左侧移动,因为页面会被翻转。你建议我该怎么做才能防止这种情况发生呢?谢谢。

pdfView.gestureRecognizers = self.pageViewController.gestureRecognizers;

将视图控制器的 gestureRecognizers 设置而不是 pdfView 的,可以在 UIScrollView 中解决此问题(可以在 UIScrollView 内部移动),但用户无法滑动以翻页(代码:viewController.view.gestureRecognizers = ...)。 - Jack Humphries
3个回答

5
我知道我的答案被接受了,但我已经尝试将我的UIView更改为scrollView,并且所有内容都工作得更好。当我缩放页面时,该页面的pageview手势停止工作,因此我可以自由缩放和平移缩放后的图像,而当我缩放到初始比例时,页面手势会自动重新开始工作。我的dataViewController中有视图、全屏滚动视图和位于滚动视图中的全屏imageView。
-UIPageViewController
   -UIViewController
        -UIView
            -UIScrollView
                -UIImageView

所以,如果您想在页面缩放时更改页面,您可以选择在缩放页面时平移或使用平移手势更改页面。这是我正在寻找的行为,在我的代码中我手动完成,但我将更改为UIScrollView,因为UIScrollView的平移和捏合手势比我自己的要好得多。

我有完全相同的问题。您能否提供一些想法,说明您如何使用UIScrollView实现解决方案? - Remover
我刚刚按照我说的做了,没有任何更改就成功了。但每个页面都是一个滚动视图,所以如果您处于2页模式,则需要逐个缩放页面。只需在每个页面使用的视图控制器的视图中添加一个UIScrollView即可。 - jcesarmobile

3
尝试这个方法,不要使用scrollview,而是使用常规UIView。向这个新的UIView添加一个UIPinchGestureRecognizer来缩放它,并添加一个UIPanGestureRecognizer来移动内容。(您需要创建捏和平移操作,但您可以通过谷歌查询它们)我做了类似的事情并且有效,唯一的问题是有时会检测到页面滑动而不是视图平移,您可以通过强制平移需要2个触摸点来解决。如果您有疑问,请让我知道。

0

我制作了这个库,使得这个设置可以工作

-UIPageViewController
   -UIViewController
        -UIView
            -UIScrollView
                -UIImageView

https://github.com/holyman2k/WXPagedPhotoView

我唯一的问题是当用户缩放照片时,页面控制器的平移手势被禁用,直到用户滚动到边缘并重新开始平移。您可能会遇到这种奇怪的行为:用户将照片放大,滚动到最右边,然后滚动停止,然后再次滚动以转到下一页。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接