我使用UIScrollView显示PDF文件。水平滚动会更改页面。这样可以正常工作,但是当下一页是完整大小的图像时,滚动视图会在开始为滚动设置动画之前卡住。这是正常行为。
我希望在持续时间超过例如时显示活动指示符一秒钟,以改善对用户的反馈。
我已经尝试过启动计时器的天真方式,在一秒钟后启动指示器。它没有显示,我假设它在与活动(更改页面)相同的线程上排队,这需要很长时间。我也尝试使用performSelectorOnMainThread来启动指标,但这是一个微弱的猜测并没有帮助。
我对iOS中线程的理解是这里的问题。我只能猜测,我必须中断页面更改,执行活动指示器的开始,然后继续更改(呈现)页面。我不知道该怎么做。我很欣赏。
答案 0 :(得分: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;
}
}