我试图通过在动画块中递增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];
}];
}
答案 0 :(得分:3)
你在这里与视图动画作斗争。每个动画都包含UIViewAnimationOptionCurveEaseInOut
时序曲线。这意味着你每0.05秒尝试提高你的速度然后放慢你的速度然后转到其他地方。
通过传递选项UIViewAnimationOptionCurveLinear
,第一个也是最简单的解决方案可能会变为线性时序。
也就是说,每5ms制作一个新动画真的与Core Animation相悖,使代码复杂化并损害性能。将框架发送到当前希望它去的地方。每当你想让它去其他地方时(即使它仍然是动画的),将它发送到通过选项UIViewAnimationOptionBeginFromCurrentState
的新地方。它会自动调整到新目标。如果您希望它重复动画或来回反弹,请使用重复选项(UIViewAnimationOptionRepeat
和UIViewAnimationOptionAutoreverse
)。