我正在为一个视图设置动画(moveonView)。已为此视图设置自动版式。当我在CABasicAnimation中将moveonView的'y'位置作为fromValue给出时,它在动画过程中不在原处。我需要提供一些填充值以将其放置在正确的位置。为什么fromValue不正确地放置我的视图?断点还显示fromValue从“moveonView”中获取了正确的“y”值,但仍然错误地放置了视图。可能是什么原因。

CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"position.y";
animation.delegate = self;
animation.fromValue = [NSNumber numberWithFloat:_moveonView.frame.origin.y];
animation.toValue = [NSNumber numberWithFloat:self.view.frame.size.height - 100]; //[NSValue valueWithCGPoint:endPosition.origin];
animation.duration = 3;
[_moveonView.layer addAnimation:animation forKey:@"basic"];

我需要提供一些填充值以将其放置在准确的位置上
 animation.fromValue = [NSNumber numberWithFloat:_moveonView.frame.origin.y + 50];

最佳答案

框架的原点和图层的位置不是同一点。

当您索取frame.origin.y时,它是视图左上角的y坐标(在iOS上),这意味着它与CGRectGetMinY(frame)相同。

但是,图层的位置对应于视图的center。因此,在为position.y设置动画时,这与移动视图的中心相同。

您可以使用CGRectGetMidY(frame)更新您的值(请注意,将mi 更改为mi )。

animation.fromValue = @( CGRectGetMidY(_moveonView.frame) );

07-27 13:58