iOS Touch, Gestes, Animation

J'explore iOS4.3 SDK et je voulais mettre en œuvre un effet d'animation particulier. Mais je n'ai aucune idée de comment le faire. Ça va comme ça – j'ai une boîte carrée sur l'écran et quand l'user met son doigt sur la boîte et traîne son doigt, la boîte devrait le suivre. C'est facile jusqu'à ici. J'ai été capable de l'implémenter comme ça –

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint location = [touch locationInView:self.view]; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:2]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; CGAffineTransform scaleTrans = CGAffineTransformMakeScale(scaleFactor, scaleFactor); CGAffineTransform rotateTrans = CGAffineTransformMakeRotation(angle * M_PI / 180); boxView.transform = CGAffineTransformConcat(scaleTrans, rotateTrans); angle = (angle == 180 ? 360 : 180); scaleFactor = (scaleFactor == 2 ? 1 : 2); boxView.center = location; [UIView commitAnimations]; } 

Mais comme l'user lève son doigt, je veux que la boîte continue avec le mouvement (comme si avec l'élan). C'est comme le même effet de défilement élastique qu'applique la pomme; Même lorsque vous laissez le défilement, l'écran défile et s'arrête lentement. Comment puis-je l'implémenter?

Pourquoi ne pas envisager d'utiliser UIPanGestureRecognizer . Vous pouvez utiliser la translationInView: pour déplacer la boîte en déplaçant le doigt. Et lorsque l' state du geste est UIGestureRecognizerStateEnded , vous pouvez utiliser velocityInView: pour get l'effet de suivi souhaité.

 if (recognizer.state == UIGestureRecognizerStateEnded) { CGPoint velocityPoint = [recognizer velocityInView:yourView]; [UIView setAnimationDelegate:self]; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [yourView setCenter:CGPointMake(yourView.center.x + (velocityPoint.x/4), yourView.center.y + (velocityPoint.y/4))]; [recognizer setTranslation:CGPointZero inView:yourView]; [UIView commitAnimations]; } 

J'espère que cela aidera quelqu'un 🙂