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

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

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

最佳答案

我在iOS 8上遇到了此错误。当执行从底部手势进行滑动以显示Control Center时,滚动视图和其他带有自定义手势的视图都被传递了触摸。我在屏幕底部附近有一些UIButton,它们也将开始跟踪。这些问题都没有发生在使用相同手势显示Control Center的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];
    }];
}

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

当我的应用程序再次激活时,该应用程序将忽略交互事件,并将Windows的色彩模式恢复为自动。

希望对您有帮助。

10-07 13:44
查看更多