UIView动画不一致的结果

我正在尝试使用UIView动画在屏幕上滑动我的视图。 我有我的视图控制器中的UIScrollView,其中我有我的UIViews。

我有这个方法:

-(void)translateView:(UIView *)view toRect:(CGRect)rect withDuration:(CGFloat)duration
{
    [UIView animateWithDuration:duration
    animations:^
    {
        view.frame = rect;
    }
    completion:^(BOOL finished)
    {
        //Finished
    }];
}

我打电话给我的UIView以动画的方式在特定时间移动到我选择的CGRect。 我有一个循环创建并滑出7个视图。 这很好,我把它称为如下,循环当然在不同的视图上调用这7次:

[self translateView:cell toRect:translationRect withDuration:0.7];

但是,之后我不能立即再次调用它,只是没有任何反应。 虽然,可以说我在2秒NSTimer之后再次调用这个动画,但动画确实运行,但是当我滚动我的UIScrollView时,我只是动画的视图跳回到它以前的CGRect。

希望你能帮助,它的所有感觉非常解释,如果没有任何意义,我发布更多的代码,谢谢。


您的故事板启用了自动布局功能。 自动布局运行时,它会根据您在故事板中设置的约束(或为您自动设置的约束)设置视图的帧。 这意味着如果您更改视图的框架,则自动布局会在下次运行时撤消更改。

系统会在各种时间自动触发自动布局,包括滚动滚动视图时。 这就是为什么当你滚动时你看到你的观点“跳回来”。

如果你不需要自动布局,你可以把它关掉(如果你需要关掉它,请看这个答案)。 然后,您可以在故事板中使用较旧的“弹簧和支柱”布局系统,从而可以根据需要设置视图的框架。

如果您确实需要自动布局,则需要了解如何使用自动布局制作动画。 有两种基本方法。 一种方法是修改约束,以便自动布局将视图放到您想要的位置,然后在动画块中执行[view layoutIfNeeded]以将视图设置为其新位置的动画。 另一种方法是使用NSTimerCADisplayLink为约束本身制作动画。

WWDC 2012视频“Session 228 - 掌握自动布局的最佳实践”解释了您的问题,并深入讨论了这两种技术,从30分45秒开始。 如果您需要通过自动布局使用动画,我强烈建议您观看WWDC 2012上的视频以及其他与自动布局相关的视频。

链接地址: http://www.djcxy.com/p/39475.html

上一篇: UIView Animation Inconsistent Result

下一篇: How to develop or migrate apps for iPhone 5 screen resolution?