2

私のアプリケーションでは、 UIImageView をデフォルトの位置からユーザーがタップしたポイントに移動したいと考えています。ただし、このアニメーションを完了する前にユーザーが別のポイントを再度タップした場合、その imageView は元の位置から開始するのではなく、新しいポイントをタップした後にアニメーションを停止したポイントから開始する必要があります。これどうやってするの。以下は、imageViewをユーザータップの位置に移動するコードです。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{


UITouch *touch=[[event allTouches]anyObject];
touchedPoint= [touch locationInView:touch.view];

[imageViews.layer removeAllAnimations];

[UIImageView animateWithDuration:2.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    [CATransaction begin];        
    CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    pathAnimation.duration = 2.0f;
    pathAnimation.calculationMode = kCAAnimationPaced;
    animationPath = [UIBezierPath bezierPath];
    [animationPath moveToPoint:imageViews.center];
    [animationPath addLineToPoint:CGPointMake(touchedPoint.x,touchedPoint.y)];

    pathAnimation.path = animationPath.CGPath;
    pathAnimation.fillMode = kCAFillModeForwards;
    pathAnimation.removedOnCompletion = NO;
    [imageViews.layer addAnimation:pathAnimation forKey:@"animatePosition"];
    [CATransaction commit];


}
completion:nil]; //or completion:^(BOOL) finished { your code here for when the animation ended}];

}
4

2 に答える 2

1

代わりにこれを使用してください:

[UIImageView animateWithDuration:2.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
} completion:nil];

このUIViewAnimationOptionBeginFromCurrentStateオプションは、画像の現在の位置からアニメーションを開始します。そのため、画像を別のアニメーションで動かしている場合、すべてがうまく溶け込みます。

お役に立てれば。

乾杯!

于 2012-07-10T06:55:15.403 に答える
0
  1. グローバルCGPointを定義します。
  2. アニメーションに沿って0.1秒ステップの繰り返しタイマーを開始します(ユーザーの最初のタップで)。
  3. ティックカウントごとに、画像の位置を読み取り、上記で定義したCGPointを設定します。
  4. アニメーションの開始後、ユーザーがもう一度タップすると、前のアニメーションを停止し、上記のCGPointを「moveToPoint」として使用して別のアニメーションを開始します。

ユーザーがタップして方向を変更する前にアニメーションが停止した場合は、タイマーを無効にします。

于 2012-07-10T07:25:24.943 に答える