如何立即显示UIPageControl的实例?(我已经将defersCurrentPageDisplay设置为NO。)
我有一个UIPageControl实例,它是在我的视图出现时配置的(页数、当前页面,然后更新)。然而,在它出现在用户面前之前,有一个短的、固定的延迟。我想让它马上出现。
除此之外,它工作得很好。
发布于 2011-09-13 13:17:10
问题是我正在执行一个冗长的后台进程,并且我无意中最终从这个辅助线程调用了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];
}
}
}发布于 2015-01-08 18:45:53
我已经修复了延迟问题,添加了UIPageViewController委托的willTransitionToViewControllers并在那里设置了pageController的索引:
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers {
for (MyContentPageViewController *contentController in pendingViewControllers) {
if ([contentController isKindOfClass:[MyContentPageViewController class]]) {
NSUInteger newIndex = contentController.pageIndex;
[self.pageControl setCurrentPage:newIndex];
}
}然后,为了避免在未完成卷帘的情况下出现错误,请添加以下委托方法:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{
if(finished){
for (MyContentPageViewController *contentController in previousViewControllers) {
if ([contentController isKindOfClass:[MyContentPageViewController class]]) {
NSUInteger currentIndex = MIN(MAX(0, contentController.pageIndex), _allPages.count- 1);
[self.pageControl setCurrentPage:currentIndex];
}
}
} else {
for (MyContentPageViewController *contentController in previousViewControllers) {
if ([contentController isKindOfClass:[MyContentPageViewController class]]) {
NSUInteger currentIndex = MIN(MAX(0, contentController.pageIndex), _allPages.count);
[self.pageControl setCurrentPage:currentIndex];
}
}
}}
https://stackoverflow.com/questions/7395872
复制相似问题