iphone - UIQueuingScrollView didScrollWithAnimation 中的断言失败 :force:

标签 iphone ios uipageviewcontroller

我有一个 UIPageViewController 设置分页我的 ImageViewController

ImageViewController 包含一个 UIScrollView,里面有一个 UIImageView。没有别的。

目前我正在测试 UIPageViewController 的数据源中的 3 个“项目”(即三页)。

一切正常,我可以滚动和缩放,然后翻页约 30 秒,然后突然收到此警告...

*** Assertion failure in -[_UIQueuingScrollView _didScrollWithAnimation:force:], /SourceCache/UIKit/UIKit-2372/_UIQueuingScrollView.m:778

我不知道从哪里开始调试它,因为它没有指向我的任何代码,堆栈中也没有我的任何代码。

谁能告诉我从哪里开始调试这个问题。

编辑

我做了更多的测试。如果 scrollView 正在减速(即轻弹后),这似乎会发生,然后我尝试将 PageViewController 转换为另一个 ViewController,因为 scrollview 仍在移动。

在过渡到下一页的过程中,应用程序崩溃了大约 20%。

编辑 2

错误似乎在 _cache_getImp 行停止(不确定那是大写 i 还是小写 L)。

编辑 3

这会变得更好。我刚刚下载了 Apple 的 PhotoScroller 示例应用程序,看看他们是否以不同的方式解决了这个问题。好吧,不,他们没有。示例应用程序崩溃的方式与我的完全相同!您必须同时缩放、滚动和转换页面,以使其更容易崩溃,但它也会自己发生,只是可能需要更长的时间才能发生。

最佳答案

想到了解决办法!在我的例子中,我有一个 UIPageViewControllerUIPageViewControllerTransitionStyleScroll 以及允许用户通过点击在我的 viewpager 中前进的下一个按钮。当用户按下一个按钮并在松开手指(仍在按钮的框架内)之前稍微拖动时,我遇到了这个崩溃。在这种情况下,按钮内的拖动似乎干扰了 UIPageViewController 的平移手势识别器,这就是导致崩溃的原因。

虽然用户不太可能进入这种状态,但我想出了一个相对简单的解决方案,可以防止我的应用程序在这种情况发生时崩溃。我有一个 bool 值,表示用户是否处于有效状态以移动到下一个屏幕并将其设置为 YES 在触摸时,然后如果用户在我的按钮内拖动任何位置则设置为 NO。然后,在 touchUp (nextPressed) 上,我在以编程方式移动 UIPageViewController 之前检查 bool 值。

- (IBAction)touchDown:(id)sender
{
  self.shouldAdvanceToNextScreen = YES;
}

- (IBAction)touchDragInside:(id)sender
{
  self.shouldAdvanceToNextScreen = NO;
}

- (IBAction)nextPressed:(id)sender
{
  if (self.shouldAdvanceToNextScreen) {
    UIViewController *initialViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TutorialScreen2"];
    NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
  }
}

缺点是即使用户仍然在按钮框架内松开手指,也不会发生任何事情。但是,我更喜欢这种情况而不是崩溃,无论如何都将其视为一种非常罕见的边缘情况。我希望用户只需再次点击 - 这次没有点击和拖动 - 并成功向前移动。

我欢迎任何关于更进一步并防止触摸拖动和 UIPageViewController 之间发生冲突的想法。

关于iphone - UIQueuingScrollView didScrollWithAnimation 中的断言失败 :force:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916422/

相关文章:

ios - Storyboard中其他 View Controller 的 IBOutlets

iphone - 保存用相机拍摄的图像或从相机胶卷中选择的图像时出现长时间延迟 - iPhone

ios - 点击标签栏时将表格 View 滚动到顶部

ios - 下载前获取图片尺寸

swift - (Swift) 在 ViewController 的容器 View 中显示 TableViewController

iphone - 如何在 UIPageViewController 中的一页设置文本和另一页的图像

iPhone Store Kit 返回无效产品 ID 错误

iphone - 上传 iPhone 应用程序但将其保密?

ios - 如何使用变换旋转 UIView?

ios - 如何调试在不是由 Xcode 启动的移动设备中执行的 iOS 应用程序?