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

时间:2014-10-15 12:59:24

标签: ios objective-c uiscrollview uiscrollviewdelegate control-center

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

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

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

1 个答案:

答案 0 :(得分:4)

我在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不活动。

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

希望这会对你有所帮助。