2012-02-08 1 views
2

J'ai une application de livre qui utilise le UIPageViewController pour naviguer dans son contenu. Pour une raison quelconque, il y a des moments où je tourne la page (avec le geste de balayage), et les transitions ont lieu, mais sans l'animation. Il n'y a pas d'animation de changement de page, mais le nouveau contenu est juste là.Transitions UIPageViewController sans l'animation parfois. Pourquoi?

Pourquoi est-ce? Serait-ce parce que j'ai des appels de db en arrière-plan qui pourraient être en désordre avec les animations de l'interface utilisateur?

Merci

EDIT: Voici le code qui gère les transitions

#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

il pourrait y avoir une fuite, pourriez-vous poster votre code – iProRage

+0

Je suis confronté au même problème. Avez-vous le résoudre? Merci d'avance – Soniya

Répondre

1

Je pense qu'il est à cause de votre ligne:

[data setCurrentPage:currentIndex-1]; 

dans votre fonction viewControllerBeforeViewController: et viewControllerAfterViewController:.

Ces fonctions n'ont besoin que de renvoyer un viewController approprié. Le travail de changer le contrôleur actuel et de jouer l'animation n'est pas le vôtre mais le délégué UIPageViewControllerDataSource. Si vous le définissez vous-même, il n'y aura pas d'animation

Questions connexes