CoreAnimation非常简单,但是:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:30];
MyImageView.frame = CGRectOffset(MyImageView.frame, 100, 0);
[UIView commitAnimations];
我想慢慢移动ImageView by 100 Pixel veeeery。因此,所有定位值都是双倍我期望Layoutsystem以亚像素精度定位项目。 但是当我观看这个动画时,我看到ImageView以像素方式“跳跃”而不是平滑的旅行。 有什么想法来实现真正的亚像素定位吗? 我还尝试用计时器设置位置并重新计算帧值,但效果相同。
更新: 在我的应用程序的另一部分中,我使用Accelerometer来更新ImageView的位置,然后基本上计算图形的位置广告大小,然后执行:
MyImageView.frame = newCGRect;
我从Accelerometer获得了大约60次更新,并从Apple的Accelerometer示例中添加了LowPass-Filter。
这里的定位是完美的吗?!?!
为什么CoreAnimation不会发生这种情况?
感谢您的帮助。
答案 0 :(得分:1)
尝试使用CGAffineTransformTranslate(MyImageView.transform,100,0)代替CGRectOffset。
答案 1 :(得分:0)
如果在QuartzCore框架中使用CABasicAnimation,则可以使用“CAMediaTimingFunction”平滑动画。内置替代品对我有用,但据我所知,您也可以定义自己的计时功能。
CABasicAnimation *starShineAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
starShineAnimation.removedOnCompletion = NO;
starShineAnimation.fillMode = kCAFillModeForwards;
starShineAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
....