UIQueuingScrollView中的断言失败didScrollWithAnimation:force:

Fog*_*ter 31 iphone ios uipageviewcontroller

我有一个UIPageViewController设置寻呼我的ImageViewController.

ImageViewController包含UIScrollView有一个UIImageView内部.没有其他的.

我正在测试我的数据源中的3个"项目" UIPageViewController(即三页).

这一切都很好,我可以滚动和缩放,然后页面约30秒,然后我突然得到这个警告......

*** Assertion failure in -[_UIQueuingScrollView _didScrollWithAnimation:force:], /SourceCache/UIKit/UIKit-2372/_UIQueuingScrollView.m:778
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始调试它,因为它没有指向我的任何代码,并且堆栈中没有任何代码或任何东西.

有人可以给我一个指针,指出从哪里开始调试这个.

编辑

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

该应用程序在转换到下一页的过程中崩溃了大约20%.

编辑2

错误似乎停在了_cache_getImp行(不确定这是大写字母i还是小写字母L).

编辑3

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

Kyl*_*egg 5

拿出解决方案!在我来说,我有一个UIPageViewControllerUIPageViewControllerTransitionStyleScroll以及下一个按钮,允许用户通过点击通过我viewpager前进.当用户按下下一个按钮并在释放他们的手指之前稍微拖动(仍然在按钮的框架内)时,我遇到了这个崩溃.UIPageViewController在这种情况下,按钮内的拖动似乎会干扰平移手势识别器,这就是导致崩溃的原因.

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

- (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];
  }
}
Run Code Online (Sandbox Code Playgroud)

缺点是即使用户仍然将手指放在按钮框内,也不会发生任何事情.但是,我更倾向于崩溃,并认为这是一个非常罕见的边缘情况.我希望用户可以再次点击 - 这次没有点击和拖动 - 并成功前进.

我欢迎任何有关进一步采取措施并防止触摸拖动与UIPageViewController完全冲突的想法.


Rem*_*ver 1

您是否尝试过在 UIScrollView 中禁用弹跳?这对我有用,并解决了我在上面的评论中也提到的其他问题。