updateCurrentPageDisplay

updateCurrentPageDisplay

如何使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];
    }
  }
}

10-08 12:09