2014-08-30 4 views
1

Je veux faire un UIView sortir de l'écran sur un toucher et revenir après un petit délai après retouche. Jusqu'à présent:UIView Animation Annuler

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([touch view] == myMainView) 
    { 
    [disappearingView.layer removeAllAnimations]; 
    [UIView animateWithDuration:0.5 
          delay:0 
     usingSpringWithDamping:0.7 
      initialSpringVelocity:0.2 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^ 
    { 
     disappearingView.transform = CGAffineTransformMakeScale(0, 0); 

    } 
        completion:^(BOOL finished) 
    { 

    }]; 

    } 
} 

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([touch view] == myMainView) 
    { 
     [UIView animateWithDuration:0.5 
          delay:1 
     usingSpringWithDamping:0.7 
      initialSpringVelocity:0.2 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^ 
    { 
     disappearingView.transform = CGAffineTransformMakeScale(1, 1); 

    } 
        completion:^(BOOL finished) 
    { 

    }]; 

    } 
} 

Le code ci-dessus fonctionne correctement jusqu'à présent. Cependant, si l'utilisateur lève le doigt et redescend avant que le délai d'une seconde n'expire, la vue disparaît, même avec le toucher. Si vous posez et descendez au hasard, l'animation est très incohérente.

Je veux que la vue revienne seulement après 1 seconde et il n'y a aucune touche du tout.

Répondre

1

Définissez un indicateur dans touchesBegan et effacez-le à nouveau dans touchesEnded. Dans votre bloc d'animation pour touchesEnded, vérifiez le drapeau et ne le remettez pas à (1,1) si le drapeau est activé. De cette façon, si vous obtenez une seconde touche après la fin du premier mais avant que l'animation se termine, il ne reviendra pas.

+0

Je suis en train de l'essayer. Quelle est la meilleure pratique sur le DELAY. Dois-je le faire en retardant l'animation? ou faites [self performSelector: @selector (touchUpAnimations) withObject: nil afterDelay: 1]; ? – Gizmodo

+0

Je ne pense pas qu'il y ait une grande différence. Ma préférence serait de laisser l'animation faire le retard (comme vous le faites actuellement), mais le faire dans l'autre sens éviterait d'animer "ne rien faire" si un autre contact s'est produit. – pbasdf