문제는 오래 걸리는 백그라운드 프로세스를 수행하고 있으며 부수적으로 궁극적으로 updateCurrentPageDisplay
등을이 보조 스레드에서 호출했습니다. UIKit
은 스레드로부터 안전하지 않으며 주 스레드로 이동할 수있을 때까지이 호출을 차단하므로 지연이 발생합니다.
이 문제를 해결하기 위해 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];
}
}
을 다음 : 나는 UIPageViewController의 대리인의 willTransitionToViewControllers를 추가하고 거기 pageController의 인덱스를 설정하여 지연 문제를 해결 한
- (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];
}
}
}
출처
2011-09-13 05:17:09
SK9
당신은'viewWillAppear' 또는'viewDidAppear'에서 설정하고 있습니까? –
둘 다 시도했지만 문제가 여전히 있습니다. 나는 페이지 컨트롤이 즉시 나타나기로되어 있다고 가정한다. (이전에이 객체를 사용하지 않았습니다.) – SK9