iOS 控制中心触摸传递到我的滚动视图?

Posted

技术标签:

【中文标题】iOS 控制中心触摸传递到我的滚动视图?【英文标题】:iOS Control Center touches pass through to my Scroll View? 【发布时间】:2014-10-15 12:59:23 【问题描述】:

我有一个UIScrollView,它沿着我的应用程序的底部边缘水平滚动。我注意到一个错误,如果用户向上滑动以打开控制中心,控制中心会附加到他们的手指上,但会调用我的 scrollViewDidBeginDragging 方法。麻烦的是,没有调用后续的结束方法,这意味着我的滚动视图认为有人开始拉它并且从未停止过。

这是一个已知的事情,在打开控制中心(或者我猜也是通知中心)时,触摸会传递到下面的应用程序?它似乎只发生在设备上,而不是在模拟器中(在 sim 中,从不调用 scrollViewDidBeginDragging 委托方法)。

有人遇到过这个吗?这似乎很难防范。

【问题讨论】:

【参考方案1】:

我在 ios 8 中遇到了这个错误。当从底部手势滑动以显示控制中心时,滚动视图和其他具有自定义手势的视图都获得了触摸。我在屏幕底部附近有一些 UIButtons,它们也将开始跟踪。这些问题都没有发生在 iOS 7 中使用相同的手势来显示控制中心。

我对 iOS 8 的修复是将以下代码添加到我的应用程序委托的 applicationWillResignActive 和 applicationDidBecomeActive 方法中。

- (void)applicationWillResignActive:(UIApplication *)application

    [application beginIgnoringInteractionEvents];
    [UIView animateWithDuration:0.25 animations:^
        for (UIWindow *aWindow in application.windows)
        
            aWindow.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed;
        
    ];



- (void)applicationDidBecomeActive:(UIApplication *)application

    [UIView animateWithDuration:0.25 animations:^
        for (UIWindow *aWindow in application.windows)
        
            aWindow.tintAdjustmentMode = UIViewTintAdjustmentModeAutomatic;
        
     completion:^(BOOL finished) 
        [application endIgnoringInteractionEvents];
    ];

当我的应用退出活动状态时,此代码基本上会关闭所有交互。我还决定将所有窗口的色调模式设置为暗淡,这是我自己的选择,以帮助用户了解我的工具栏项目和其他使用 tintColor 的 UI 未激活。

当我的应用再次激活时,应用会结束忽略交互事件并将窗口的色调模式恢复为自动。

希望对你有所帮助。

【讨论】:

以上是关于iOS 控制中心触摸传递到我的滚动视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过拖动滑块来控制我的 Kivy 滚动视图?

UIScrollView 没有将触摸传递给子视图?

带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动

在 ios 的滚动视图内检测按钮的触摸

MKMapView 在滚动到底部并触发控制中心后停止滚动

在 ios 的滚动视图中绘制缩放的图像视图?