约束动画问题
Posted
技术标签:
【中文标题】约束动画问题【英文标题】:Constraint animation issue 【发布时间】:2016-02-05 13:46:52 【问题描述】:我正在构建一个应用程序,但我遇到了一个奇怪的约束问题。
我正在尝试为情节提要中附加到 UIView
的高度约束设置动画,但模拟器显示了一些奇怪的行为。为了调试,我创建了一个全新的 ios 9.2 项目并添加了一个UIButton
,为其设置了一个水平引脚和超级视图顶部约束,将顶部约束链接到我的头文件并将按钮本身链接到 IBAction
。
单独调用此代码时:
- (IBAction)myAction:(id)sender
self.topConstraint.constant += 150.0f;
即使没有调用[self.view layoutIfNeeded];
,按钮也会向下捕捉 150 点。
但是,当我使用此代码时:
- (IBAction)myAction:(id)sender
self.topConstraint.constant += 150.0f;
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:1 animations:^
[self.view layoutIfNeeded];
];
按钮向下滑动。
当没有动画块时,它怎么会在没有我调用layoutIfNeeded
的情况下捕捉到那里?我觉得这很奇怪。
这是我的头文件:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;
@end
还有我的***NSLayoutConstraint
设置:
还有界面生成器中的UIViewController
:
【问题讨论】:
如果需要,在布局的时候不需要调用set需要更新约束!!! @Mr.T,我明白了 - 我会改变它。感谢您的反馈。您知道为什么会出现我所面临的问题吗? 【参考方案1】:在视图上调用 layoutIfNeeded 只是强制提前更新视图,而不是等待整个绘图周期的更新,当您为约束设置动画时,您将 layoutIfNeeded 放置在动画块内,从而在第二次为更改设置动画在不调用 layoutIfNeeded 的情况下,绘制周期会出现并更新没有动画的视图。
【讨论】:
我明白了。将不断变化的代码沿layoutIfNeeded
放在动画块中会更合适吗?
我想让它动画化,但你用你的评论回答了这个问题。我想知道是否应该更改常量以及在同一动画块中调用layoutIfNeeded
不需要将常量放入动画块中。没有什么可以动画的。更改约束的常量并更新视图后,读取约束并相应更改视图。以上是关于约束动画问题的主要内容,如果未能解决你的问题,请参考以下文章