2012-02-08 7 views
2

私はUIPageViewControllerを使ってそのコンテンツをナビゲートするブックアプリケーションを持っています。何らかの理由で、ページをめくる(スワイプジェスチャーで)、アニメーションなしでトランジションが行われることがあります。ページターンアニメーションはありませんが、新しいコンテンツはすぐそこにあります。UIPageViewControllerはアニメーションなしで遷移することがあります。どうして?

なぜですか?バックグラウンドでUIアニメーションを乱す可能性のあるいくつかのdbコールがあるためですか?

おかげ

EDIT:あなたのviewControllerBeforeViewController:viewControllerAfterViewController:機能で

[data setCurrentPage:currentIndex-1]; 

:ここで遷移

#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

+0

私は同じ問題に直面しています。あなたはそれを解決しましたか?前もって感謝します – Soniya

答えて

1

私はそれが原因であなたのラインのだと思うを処理するコードです。

これらの関数は、適切なviewControllerを返すだけでよい。現在のコントローラとアニメーションを変更する作業はあなたのものではなく、UIPageViewControllerDataSourceデリゲートです。

関連する問題