2012-02-08 105 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委托。如果你自己设置它,也不会有动画

相关问题