私のアプリケーションでは、 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}];
}