iOS中使用CoreAnimation实现平滑动画

4

核心动画是一件相当简单的事情,但是:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:30];
MyImageView.frame = CGRectOffset(MyImageView.frame, 100, 0);
[UIView commitAnimations];

我希望能够将ImageView缓慢地向右移动100个像素。因此,我期望所有定位值都是双倍的,以便布局系统可以以亚像素的精度定位物品。 但是当我观察这个动画时,我看到ImageView会“跳跃”而不是平稳地移动。你有什么想法来实现真正的亚像素定位吗? 我还尝试使用计时器设置位置并重新计算帧值,但效果相同。 更新:在我的应用程序的另一部分中,我使用加速度计来更新ImageView的位置,并基本上计算图形的位置和大小,然后执行以下操作:
MyImageView.frame = newCGRect; 

我从加速度计那里得到了大约60个更新/秒,并添加了苹果公司加速度计示例中的低通滤波器。
这里的定位完美吗?!?!
为什么使用CoreAnimation时不会发生这种情况?

感谢任何帮助。


如果您尝试对“center”进行动画处理而不是“frame”,会发生什么? - cobbal
能否更改插值函数?也许当前的函数正在使用整数?(只是猜测。但这就是CA的情况。) - Martin Wickman
我有完全相同的问题。你找到解决方案了吗? - MatterGoal
2个回答

1

0
如果您在QuartzCore框架中使用CABasicAnimation,可以使用“CAMediaTimingFunction”平滑动画。内置的替代方案对我来说很有效,但据我所知,您也可以定义自己的时间函数。
CABasicAnimation *starShineAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
starShineAnimation.removedOnCompletion = NO;
starShineAnimation.fillMode = kCAFillModeForwards;
starShineAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接