1

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

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

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

4

1 回答 1

4

我在 iOS 8 中遇到了这个错误。当从底部手势滑动以显示控制中心时,滚动视图和其他具有自定义手势的视图都获得了触摸。我在屏幕底部附近有一些 UIButton,它们也将开始跟踪。这些问题都没有发生在 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 未激活。

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

希望这对您有所帮助。

于 2014-10-22T15:24:01.507 回答