CALayer
画面上の別の場所にドラッグしたを使用した後、元の位置に戻る アニメーションを作成したいと思いUIPanGestureRecognizer
ます。
これが私が持っているものです:
@interface ViewController () {
CGPoint defaultButtonPosition;
CGPoint lastPosition;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
defaultButtonPosition = _roundShape.layer.position;
self.view.backgroundColor = [UIColor blackColor];
[_roundShape displayShape];
[self.view.layer addSublayer:_roundShape.layer];
}
//code so I can drag my CALayer
- (IBAction)dragShape:(UIPanGestureRecognizer *)sender
{
CGPoint translation = [sender translationInView:self.view];
sender.view.center = CGPointMake(sender.view.center.x + translation.x, sender.view.center.y + translation.y);
[sender setTranslation:CGPointMake(0, 0) inView:self.view];
lastPosition = sender.view.center;
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"Pan ended");
[self animateBackToOriginalPosition];
_roundShape.center = lastPosition;
}
}
- (void)animateBackToOriginalPosition
{
CABasicAnimation *moveBackToOriginalPosition = [CABasicAnimation animationWithKeyPath:@"position"];
moveBackToOriginalPosition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
moveBackToOriginalPosition.fromValue = [NSValue valueWithCGPoint:lastPosition];
moveBackToOriginalPosition.toValue = [NSValue valueWithCGPoint:defaultPosition];
moveBackToOriginalPosition.repeatCount = 0;
moveBackToOriginalPosition.duration = 1.0;
[_roundShape.layer addAnimation:moveBackToOriginalPosition forKey:@"position"];
}
このコードから発生するアニメーションは、私が望むものにはほど遠いです。ドラッグしているCALayerを離すと、突然消えて、一見ランダムな場所から、設定したtoValue(= defaultPosition)ではなくlastPositionにアニメーション化されます。その後、CALayerは表示されなくなります。
CALayerをドラッグしても、NSLogは常にdefaultPositionにあると通知するため、positionプロパティは変更されないようです。そのため、使用してみ_roundShape.center = lastPosition;
ましたが、CALayerが消えてしまいます。これがないと、CALayerは画面に表示されたままになります。
私は自分の問題を十分に説明したと思います。私が自分のコードで犯した初心者の間違いを聞きたいです。