0

我使用 UIScrollView 来显示 PDF 文件。水平滚动会改变页面。这很好用,但是当下一页是全尺寸图像时,滚动视图会在开始动画滚动之前卡住。这是正常行为。

我想在持续时间超过一秒时显示活动指示器,以改善对用户的反馈。

我已经尝试过启动计时器的简单方法,该计时器在一秒钟后启动指示器。它没有出现,我假设它与需要很长时间的 UI 活动(更改页面)在同一个线程上排队。我还尝试使用 performSelectorOnMainThread 来启动指标,但这是一个弱猜测并且没有帮助。

我对 iOS 中线程的理解是这里的问题。我只能猜测,我必须中断页面更改,执行活动指示器的启动,然后继续更改(渲染)页面。我不知道该怎么做。我会很感激一个。

4

1 回答 1

0

我猜您的计时器不会触发,因为您在调用performSelectorOnMainThread方法或调度NSTimer. 它不起作用,因为在这种情况下,您的方法将在滚动完成后调用,即在您松开手指后。

为了让你的计时器即使在滚动期间也能触发,NSRunLoopCommonModes用作运行循环模式。

[self performSelectorOnMainThread:@selector(yourMethod)
                       withObject:nil
                    waitUntilDone:NO
                            modes:@[NSRunLoopCommonModes]];

编辑

您不应该阻塞主线程,否则在主线程完成加载图像之前不会调用该方法。而是在后台线程中加载图像并通过实现委托方法来防止滚动视图滚动。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
  if([self isLoadingImage]){
    //save the content offset when you start loading the image
    //and use it here to stop scroll view from scrolling.
    scrollView.contentOffset = offsetWhenLoadingStarted;
  }
}
于 2013-02-01T16:11:27.923 回答