CABasicAnimation fromValue 和 CAKeyframeAnimation 值错误
CABasicAnimation fromValue & CAKeyframeAnimation values error
我正在为视图设置动画 (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
设置动画时,这与移动视图的中心相同。
您可以将您的 from 值更新为使用 CGRectGetMidY(frame)
(注意从 min 到 mid 的变化) .
animation.fromValue = @( CGRectGetMidY(_moveonView.frame) );
我正在为视图设置动画 (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
设置动画时,这与移动视图的中心相同。
您可以将您的 from 值更新为使用 CGRectGetMidY(frame)
(注意从 min 到 mid 的变化) .
animation.fromValue = @( CGRectGetMidY(_moveonView.frame) );