如何使UIPageControl
的實例立即出現? (我已將defersCurrentPageDisplay
設置爲NO
。)UIPageControl和延遲出現
我有一個UIPageControl
的實例,當我的視圖出現時配置(頁數,當前頁面,然後更新)。但是,在用戶看來有一個短暫的固定延遲。我希望它馬上出現。
否則它工作正常。
如何使UIPageControl
的實例立即出現? (我已將defersCurrentPageDisplay
設置爲NO
。)UIPageControl和延遲出現
我有一個UIPageControl
的實例,當我的視圖出現時配置(頁數,當前頁面,然後更新)。但是,在用戶看來有一個短暫的固定延遲。我希望它馬上出現。
否則它工作正常。
問題是我正在執行一個冗長的後臺進程,並且我無意中最終會從這個輔助線程中調用updateCurrentPageDisplay
等。 UIKit
不是線程安全的,並阻止該調用,直到它可以將它移動到主線程,因此延遲。
爲了解決這個問題,我已經將UIPageControl
分類爲UIPageControl
,創建了一個將調用推送到super
到主線程上的「包裝器」方法。每當我需要使用頁面控件時,我都可以放心地忘記這一點。
例如:
- (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) updateCurrentPageDisplay
{
@synchronized(self)
{
if ([UIDevice currentDeviceSupportsGrandCentralDispatch] == YES)
{
dispatch_async(dispatch_get_main_queue(), ^{
[super updateCurrentPageDisplay];
});
}
else
{
[super performSelectorOnMainThread:@selector(updateCurrentPageDisplay)
withObject:nil
waitUntilDone:NO];
}
}
}
我已經加入UIPageViewController委託的willTransitionToViewControllers和設置的PageController的指數有固定的延遲問題未完成,請添加以下代理方法:
- (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];
}
}
}
}
你是在'viewWillAppear'還是'viewDidAppear'中配置它? –
我已經嘗試了兩種方法,但仍然存在問題。我假設頁面控件應該立即顯示? (我以前沒有使用過這個對象。) – SK9