2012-02-08 101 views
2

我有一個使用UIPageViewController瀏覽它的內容一本書的應用程序。出於某種原因,有時我翻動頁面(用滑動手勢),併發生轉換,但沒有動畫。沒有翻頁動畫,但新的內容就在那裏。UIPageViewController有時會在沒有動畫的情況下轉換。爲什麼?

這是爲什麼?難道是因爲我在後臺發生了一些數據庫調用,可能會破壞UI動畫?

感謝

編輯:這裏是處理過渡

#pragma mark - UIPageViewControllerDataSource Methods 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
    viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
currentIndex = [self.modelArray indexOfObject:[(ContentViewController *)viewController labelContents]]; 
if(currentIndex == 0) 
{ 
    return nil; 
} 
ContentViewController *contentViewController = [[ContentViewController alloc] init]; 
contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1]; 

[data setCurrentPage:currentIndex-1]; 
return contentViewController; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
    viewControllerAfterViewController:(UIViewController *)viewController 
{ 
currentIndex = [self.modelArray indexOfObject:[(ContentViewController *)viewController labelContents]]; 
if(currentIndex == self.modelArray.count-1) 
{ 
    return nil; 
} 
ContentViewController *contentViewController = [[ContentViewController alloc] init]; 
contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex + 1]; 

[data setCurrentPage:currentIndex+1]; 


return contentViewController; 
} 

#pragma mark - UIPageViewControllerDelegate Methods 

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController 
       spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation 
{ 
if(UIInterfaceOrientationIsPortrait(orientation)) 
{ 
    //Set the array with only 1 view controller 
    UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0]; 
    NSArray *viewControllers = [NSArray arrayWithObject:currentViewController]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; 

    //Important- Set the doubleSided property to NO. 
    self.pageViewController.doubleSided = NO; 
    //Return the spine location 
    return UIPageViewControllerSpineLocationMin; 
} 
else 
{ 
    NSArray *viewControllers = nil; 
    ContentViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0]; 

    currentIndex = [self.modelArray indexOfObject:[(ContentViewController *)currentViewController labelContents]]; 
    if(currentIndex == 0 || currentIndex %2 == 0) 
    { 
     UIViewController *nextViewController = [self pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController]; 
     viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil]; 
    } 
    else 
    { 
     UIViewController *previousViewController = [self pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController]; 
     viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil]; 
    } 
    //Now, set the viewControllers property of UIPageViewController 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; 

    return UIPageViewControllerSpineLocationMid; 
} 
} 
+0

它可能是一個漏洞,你可以發佈您的代碼 – iProRage 2012-02-08 01:25:58

+0

,我面臨同樣的問題。你解決了嗎?提前致謝 – Soniya 2012-03-05 10:47:42

回答

1

我想這是因爲你行的代碼:

[data setCurrentPage:currentIndex-1]; 
viewControllerBeforeViewController:viewControllerAfterViewController:功能

這些功能只需要返回一個適當的viewController。變化的電流控制器和播放動畫的工作是不是你的,但UIPageViewControllerDataSource委託。如果你自己設置它,也不會有動畫

相關問題