UIView的动画结果不一致(UIView Animation Inconsistent Resul

2019-07-03 20:24发布

我想利用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。

Answer 1:

你的故事板已自动布局启用。 当自动版式运行时,它设置的你的意见根据您设置(或已自动为您设置),在故事板的限制框架。 这意味着,如果你改变视图的框架,自动布局将在下次运行时撤消更改。

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

如果您不需要自动布局,你可以将其关闭(见这个答案 ,如果你需要帮助,将其关闭)。 然后你就可以在你的故事板,它可以让但是你想你设置的你的意见的框架使用旧的“弹簧和支柱”的布局体系。

如果您确实需要自动布局,你需要学习如何让动画与自动布局工作。 有两种基本方法。 一种方法是修改约束条件,以便自动版式将把视图,你想要的,然后做[view layoutIfNeeded]在动画块以动画视图到新的位置。 另一种方法是使用动画的约束自己NSTimerCADisplayLink

在的WWDC 2012的视频 “会话228 -为掌握自动布局的最佳实践”解释你的问题,并讨论了这两种技术的深入,开始30m45s。 如果您需要使用动画与自动布局,我强烈建议你观看视频,并从2012年WWDC其他自动版式相关的影片。



文章来源: UIView Animation Inconsistent Result