0

我试图通过在动画块中增加 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];
}];

}

4

1 回答 1

3

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

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

也就是说,每 5 毫秒制作一个新动画确实违背了核心动画的观点,使代码复杂化并损害了性能。将框架发送到您当前希望它去的地方。每当您希望它去其他地方(即使它仍在动画中)时,将其发送到传递 option 的新位置UIViewAnimationOptionBeginFromCurrentState。它会自动适应新的目标。如果您希望它重复动画或来回弹跳,请使用重复选项(UIViewAnimationOptionRepeatUIViewAnimationOptionAutoreverse)。

于 2013-02-05T04:52:46.880 回答