2012-07-04 71 views
4

我正在開發一個使用UIPageViewController的應用程序。我注意到,如果我太快更改多個頁面,它會在運行時導致幾個問題。UIPageViewController延遲頁面更改動畫

有沒有辦法在兩次頁面更改之間設置延遲(例如2或3毫秒)? 在此先感謝。

** * ** * ** * *** 詳細的解答 ** * ** * ** * ** * **

解決方案是這樣的:

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{ 

    if(completed) { 
     [pageViewController.view setUserInteractionEnabled:NO]; 
     [self performSelector:@selector(enableUserInteraction) withObject:nil afterDelay:0.2]; 
    } 
} 

-(void)enableUserInteraction{ 
    [self.view setUserInteractionEnabled:YES]; 
} 
+0

你已經接受了這個答案。你有沒有找到你想要把userInteraction = NO? – Hiren

+0

我會修改添加答案的問題:) – Lolloz89

+0

非常感謝,但我已經使用Gabriel的想法做了同樣的事情 – Hiren

回答

3

在你的動畫塊中,設置userInteraction = NO,直到動畫結束。這意味着用戶將無法與屏幕交互,從而更改頁面直到完成動畫。

+0

沒有動畫塊,因爲動畫代碼隱藏在UIPageViewController類中。此外,我不能告訴控制器userIntractionEnabled = NO當我試圖瀏覽頁面,行動將不會被接受.. – Lolloz89

0

我把它放在pageViewController:willTransitionToViewControllers:和使用dispatch_after。這種解決方案的用戶不能刷卡像 pageViewController快2-3倍:didFinishAnimating:previousViewControllers:transitionCompleted:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers { 
pageViewController.view.userInteractionEnabled = NO; 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    pageViewController.view.userInteractionEnabled = YES; 

}); 

}