2009-09-03 5 views
2

Mon fils vient de découvrir qu'il pouvait appuyer sur le bouton "Terminé" de ma vue, qui retourne à la vue précédente, une fois pour lancer le clapet et une ou plusieurs fois comme vue est en transition (flipping out). Les deuxièmes et prochains hits déclencheraient la même action, créant des résultats intéressants, tels que l'absence de vue visible, mais mon UIWindow sous-jacent.Frapper des boutons pendant que UIView est en transition, entrer ou sortir

Je pense que je devrais appeler:

[coming.view setUserInteractionEnabled: NO]; 
[going.view setUserInteractionEnabled: NO]; 

sur les deux points de vue de la transition flip, puis

[coming.view setUserInteractionEnabled: YES]; 

sur la vue finale après l'animation est terminée. Je pensais que peut-être mieux que cela serait un moyen de désactiver globalement les prises alors que toute vue était en transition. Qu'est-ce que tu penses?

est ici toute la vue du code de commutation:

- (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; 
    } 
    // 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]; 
} 

Répondre

1

setUserInteractionEnabled: semble être le chemin à parcourir. Des objections?

Questions connexes