您的位置:首页 > 大数据 > 人工智能

AutoLayout下Constraint动画

2015-03-02 21:24 197 查看
Constraint的动画如果按照一般的写法,是无效的。比如:

[UIView animateWithDuration:1.0f animations:^
{
_animateConstraint.constant = -180.0f;
}]


至于是什么原因,暂时还不了解,以后会持续关注这个问题。

网络上为了解决这个约束的动画的问题,大部分用的是View的一个方法—layoutIfNeeded。大概的作用是,持续刷新,然后就有动画了,当然这是我自己的猜测。我也不是很熟悉Layout方面的内容,并且我做了这方面的尝试之后,没有成功。

在一次偶然的日常查阅中,突然有位网友提到了bounds这个属性。于是有了下面这段代码:

CGRect originalBounds = _loginView.bounds;
CGRect newBounds = originalBounds;
newBounds.origin.y += 180.0f;

[UIView animateWithDuration:0.3f animations:^
{
_loginView.bounds = newBounds;
}
completion:^(BOOL finished)
{
_loginView.bounds = originalBounds;
_animateConstraint.constant = -180.0f;
}];


其中_loginView是需要完成动画的View,_animateConstraint是该View的约束,是距上方最近的控件的距离。

这段代码的思路是,先用bounds完成动画(为什么不用frame?自动布局里面frame是无效的?我没做过验证,不确定),但动画完成后该View处于自己有效范围外,所以动画完成之后,我将该View的bounds恢复,然后更改他的Constraint,保持在动画结束的位置,这样就比较漂亮的完成动画了。

当然,有空会试试LayoutIfNeeded来完成动画。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  约束 动画