我正在制作视图动画(moveonView)。已经为此视图设置了Autolayout。当我在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];
答案 0 :(得分:2)
框架的原点和图层的位置不一样。
当您要求frame.origin.y
这是视图左上角的y坐标时(在iOS上),这意味着它与CGRectGetMinY(frame)
相同。
但是,图层的位置对应于视图的center
。因此,当您设置position.y
的动画时,与移动视图的中心相同。
您可以更新您的值以使用CGRectGetMidY(frame)
(请注意从 n 到mi d 的更改)。
animation.fromValue = @( CGRectGetMidY(_moveonView.frame) );