Wilson Tang’s Blog

I am a slow walker, but I never walk backwards.

当AutoLayout遇到UIView Animation

| Comments

最近在项目中遇到一个关于AutoLayoutUIView Animation约束的问题。

Storyboard中, 界面布局采用了AutoLayout, 界面背景用2个UIImageView切换不同的UIImage, 通过UIView Animation来实现一个无限循环的动画效果,图层上面还有UILabel等控件。

当我在界面上修改UILabelFont属性的时候, 发现背景动画发生了变化。

动画受影响主要问题如下:

1
2
3
4
UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: {
            self.view.layoutIfNeeded()
            }, completion: {(finish) in
        })

其中用到了self.view.layoutIfNeeded()这个方法。

修改UILabelFont属性的时候, 其实self.view也做了layout的处理, 这时候UIView Animation中也同时用到了self.view.layoutIfNeeded(), 造成了错乱的效果。

开始我在代码中用了

self.view.setTranslatesAutoresizingMaskIntoConstraints(false)

结果发现进入这个界面的时候就出现来错乱, 所以肯定不能直接来手动限制self.view的约束。

解决办法: 将2个UIImageView不直接放在self.view上, 而是新添加一个UIView来放它们(比如这个Viewself.animationView), 主要它们的superView不直接是self.view。这样就不会在更新Font属性的时候, UIView Animation受到影响。

代码部分修改成如下:

1
2
3
4
UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: {
            self.animationView.layoutIfNeeded()
            }, completion: {(finish) in
        })

Comments