UIView上的平滑帧动画

时间:2013-02-04 23:19:45

标签: ios objective-c

我试图通过在动画块中递增UIView的x属性来在屏幕上移动UIView。我希望元素连续移动,所以我不能只指定结束x和持续时间。

此代码有效,但非常不稳定。在模拟器中看起来很棒但在设备上不稳定。

-(void)moveGreyDocumentRight:(UIImageView*)greyFolderView
{
[UIView animateWithDuration:0.05 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    NSInteger newX = greyFolderView.frame.origin.x + 5.0;
    greyFolderView.frame = CGRectMake(newX, greyFolderView.frame.origin.y, greyFolderView.frame.size.width, greyFolderView.frame.size.height);
    }
} completion:^(BOOL finished) {
    [self moveGreyDocumentRight:greyFolderView];
}];

}

1 个答案:

答案 0 :(得分:3)

你在这里与视图动画作斗争。每个动画都包含UIViewAnimationOptionCurveEaseInOut时序曲线。这意味着你每0.05秒尝试提高你的速度然后放慢你的速度然后转到其他地方。

通过传递选项UIViewAnimationOptionCurveLinear,第一个也是最简单的解决方案可能会变为线性时序。

也就是说,每5ms制作一个新动画真的与Core Animation相悖,使代码复杂化并损害性能。将框架发送到当前希望它去的地方。每当你想让它去其他地方时(即使它仍然是动画的),将它发送到通过选项UIViewAnimationOptionBeginFromCurrentState的新地方。它会自动调整到新目标。如果您希望它重复动画或来回反弹,请使用重复选项(UIViewAnimationOptionRepeatUIViewAnimationOptionAutoreverse)。