iOS - 如何在 UIPageViewController 中设置 UIScrollView 以在重新启用后开始滚动

Posted

技术标签:

【中文标题】iOS - 如何在 UIPageViewController 中设置 UIScrollView 以在重新启用后开始滚动【英文标题】:iOS - How To Set UIScrollView In UIPageViewController To Start Scrolling After Re-enabled 【发布时间】:2015-05-09 09:22:18 【问题描述】:

我正在处理一个在UIPageViewController 中包含可滑动表格单元格的项目。 UIPageViewController's UIScrollView 最初是禁用的。当您滑动单元格时,它会通过UIPanGestureRecognizer 慢慢显示一个按钮,当按钮完全显示时,可滑动表格单元格会向UIPageViewController(其代表)发送一条消息以启用其滚动。

启用滚动后,我需要UIPageViewController 来开始滚动,而用户仍然有手指滑动。此功能就像 Snapchat,您可以在其中向右滑动与朋友聊天。但即使启用了UIScrollView,它也不会开始滚动。用户必须将手指从屏幕上移开,然后重新放回以再次滑动以开始滚动到下一个视图。 UIPageViewController 有这个代码来启用和禁用它的滚动:

+(void)enableScrolling

    NSLog(@"supposed to enable");
    [myScrollView setScrollEnabled:YES];
    if (myScrollView.isScrollEnabled == YES) 
        NSLog(@"Scroll view is enabled");
    
    //[myScrollView.panGestureRecognizer setState:(UIGestureRecognizerState *) UIGestureRecognizerStateBegan];


+(void)disableScrolling

    NSLog(@"supposed to disable");
    [myScrollView setScrollEnabled:NO];
    if (myScrollView.isScrollEnabled == NO) 
        NSLog(@"Scroll view is disabled");
    

我想知道如果用户仍在进一步滑动,我是否必须以某种方式告诉UIPageViewController's UIPanGestureRecognizer 开始滚动?我非常接近完成这项工作。任何意见,将不胜感激。谢谢。

编辑:

我已将这行代码添加到我的页面视图控制器类中的 enableScrolling 方法中:

[myScrollView setContentOffset:[myScrollView.panGestureRecognizer translationInView:myPageViewController.view]];

这是我更新的方法:

+(void)enableScrolling

    NSLog(@"supposed to enable");
    [myScrollView setScrollEnabled:YES];
    if (myScrollView.isScrollEnabled == YES) 
        NSLog(@"Scroll view is enabled");
        [myScrollView setContentOffset:[myScrollView.panGestureRecognizer translationInView:myPageViewController.view]];
    

我的理解是,将滚动视图内容偏移设置为被触摸的当前位置应该会使滚动再次处于活动状态,但这只会使我的整个屏幕变暗。

关于我可能做错了什么有什么想法吗?

【问题讨论】:

这里是这个任务的一个很好的例子:github.com/goktugyil/EZSwipeController 【参考方案1】:

有趣的是,您正在这样做。我有一个正在构建的应用程序模板并具有相同的功能,但我决定在 tableViewCells 上放置一个 UIView,然后让该视图响应触摸,将其滑动到右侧并查看下面的内容。当我到达某个 contentOffSet 点时,我激活了 scrollView 的启用属性并禁用了 UIView 上的触摸,从而允许我滚动到下一页(就像 SnapChat 一样)。不知道这是否有帮助,但我就是这样做的!

【讨论】:

以上是关于iOS - 如何在 UIPageViewController 中设置 UIScrollView 以在重新启用后开始滚动的主要内容,如果未能解决你的问题,请参考以下文章

PageViewController 在旋转时崩溃

滚动应用:UIPageViewController vs UIScrollView

无法将自动布局约束添加到 UIPageViewController

如何在 ios 7 和 ios6 中显示启动画面

iOS - 如何在 iOS 10 中集成推送通知?

如何在MvvmCross中呈现iOS模态视图