2009-11-01 11 views
0

J'utilise le projet PageControl, qui se trouve sur le site de développement d'Apple. J'ai ajouté une vue de bascule au projet et une icône d'information en haut à droite de chaque vue/page. Pour une raison quelconque, seule la première page est capable d'animer le retournement. Sur la page 2 montre toujours la page retournée mais ne s'anime pas. Pour m'assurer que ce n'est pas quelque chose de spécial à propos de la page 1, je passe les pages 1 et 2 et cela a bien fonctionné. Page 2 en position 1 animée alors que la Page 1 en position 2 ne l'a pas fait. Des idées pourquoi cela se produirait ou comment je peux le déranger?Pourquoi aucune animation dans le projet PageControl?

J'ai pris un coup d'oeil à ce fil, qui semble être la même question: Flip View Iphone. Cependant, Mon flipview est un UIViewController et la classe avec l'icône d'information. Dans l'autre thread, ils utilisent UIViews.

j'ai fait mettre en œuvre le code showInfo du fil ci-dessus. Quand sur la page 2, je ne vois pas de flip. Ensuite, je passe à la page 1 et je vois qu'il a été retourné. Je ne sais pas pourquoi il ne reste pas avec la page 2. Quand sur la page 1, il n'anime pas le flip. Le flipview apparaît soudainement.

Répondre

1

Avez-vous un containerView? Quelque chose qui peut être là pour que vous puissiez y ajouter et supprimer des sous-vues? L'animation peut casser si vous avez deux viewControllers, un qui vient et un qui va, sans containerView. J'utilise un rootViewController et j'anime toutes mes pages les unes avec les autres avec le rootViewcontroller à l'arrière. (Voici mon code pour le retournement, vous devrez probablement faire un peu d'édition pour le faire fonctionner pour vous:

(gardez à l'esprit que self est le rootViewcontroller, un viewcontroller avec une vue vide (colorez-le donc il correspond vos points de vue))

- (void)switchTwoViews:(UIViewController *)view1 otherView:(UIViewController *)view2 
{ 
    /* 
    This method is called to switch views. 
    It flips the displayed view from the main view to the flipside view and vice-versa. 
    */ 

    UIViewController *coming = nil; 
    UIViewController *going = nil; 
    UIViewAnimationTransition transition; 

    [view1.view setUserInteractionEnabled: NO]; 
    [view2.view setUserInteractionEnabled: NO]; 
    if (view1.view.superview == nil) { 
     coming = view1; 
     going = view2; 
     transition = UIViewAnimationTransitionFlipFromLeft; 
    } 
    else { 
     coming = view2; 
     going = view1; 
     transition = UIViewAnimationTransitionFlipFromRight; 
    } 
     // in some cases the following is needed to size the view 
    // coming.view.frame = [UIScreen mainScreen].applicationFrame; 

    // going.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
    // coming.view.alpha = 0.0; 

    NSArray *viewArray = [[NSArray alloc] initWithObjects:coming, going, nil]; 
    [coming viewWillAppear:YES]; 
    [going viewWillDisappear:YES]; 
    [UIView beginAnimations:@"View Flip" context:viewArray]; { 
     [UIView setAnimationDuration:1.0]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(animationDidEnd:finished:context:)]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     //  coming.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
     //  going.view.alpha = 0.0; 

     [UIView setAnimationTransition:transition forView:self.view cache:YES]; 
     [self.view addSubview: coming.view]; 
    } 
    [UIView commitAnimations]; 

} 

- (void) animationDidEnd:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    NSArray *viewArray = context; 
    [((UIViewController *)[viewArray objectAtIndex:1]).view removeFromSuperview]; 
    [[viewArray objectAtIndex:1] viewDidDisappear:YES]; 
    [[viewArray objectAtIndex:0] viewDidAppear:YES]; 
    [[[viewArray objectAtIndex:0] view] setUserInteractionEnabled: YES]; 
    [viewArray release]; 
} 
+0

Je l'ai maintenant retourné sauf lorsque je reviens à la vue parente. Je le fais à partir de la vue Flip [self.view removeFromSuperview]. Alors que vous faites ceci [self.view addSubview: coming.view]. Mon code l'empêche de s'animer lors du retour au parent. – 4thSpace

+0

Je ne peux pas non plus utiliser le code animationDidEnd: car cela fait disparaître ma vue inversée. – 4thSpace

+0

Si vous avez appelé BeginAnimation et non animationDidEnd, puis les appels après BeginAnimation sont mis en attente et n'a pas encore eu lieu. Pas un bon état de laisser des choses. Lorsque vous basculez une vue, une vue est ajoutée, l'autre est supprimée. Si vous ne le supprimez pas, il restera derrière votre vue et vous aurez des problèmes pour le retourner (au moins avec le code ci-dessus). Continuez à jouer avec ces routines jusqu'à ce que vous appreniez ce qui se passe. Une fois que vous avez maîtrisé vous pourriez trouver d'autres façons de le faire aussi. – mahboudz