我有一个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的色彩模式恢复为自动。
希望对您有帮助。