如何使UIPageControl
实例立即出现? (我已将defersCurrentPageDisplay
设置为NO
。)
我有一个UIPageControl
实例,当我的视图出现时,该实例已配置(页面数,当前页面,然后更新)。但是,在出现给用户之前,存在短暂的固定延迟。我希望它能立即显示。
否则,它工作正常。
最佳答案
问题是我正在执行一个漫长的后台进程,并且我无意间从此辅助线程最终调用了updateCurrentPageDisplay
等。 UIKit
不是线程安全的,它会阻止此调用,直到它可以将其移至主线程为止,因此会延迟。
为了解决这个问题,我将UIPageControl
子类化为创建“包装器”方法,该方法将对super
的调用推入主线程。然后,每次需要与页面控件进行对话时,我都可以放心地忘记这一点。
例如:
- (void) updateCurrentPageDisplay
{
@synchronized(self)
{
if ([UIDevice currentDeviceSupportsGrandCentralDispatch] == YES)
{
dispatch_async(dispatch_get_main_queue(), ^{
[super updateCurrentPageDisplay];
});
}
else
{
[super performSelectorOnMainThread:@selector(updateCurrentPageDisplay)
withObject:nil
waitUntilDone:NO];
}
}
}