我想将视图从一个位置移动到另一个位置,我可以使用它来实现它
self.view.center = CGPointMake(100, 200);
但是,如果项目使用了 Autolayout,那么运行后视图会回到原来的位置:
[self.view.superview setNeedsLayout];
那么如何实际将视图移动到新位置?
我想将视图从一个位置移动到另一个位置,我可以使用它来实现它
self.view.center = CGPointMake(100, 200);
但是,如果项目使用了 Autolayout,那么运行后视图会回到原来的位置:
[self.view.superview setNeedsLayout];
那么如何实际将视图移动到新位置?
AutoLayout
启用后,我们应该FORGET FRAMES
且仅。是的,对于CONSIDER CONSTRAINTS
动画,您也不能再更改框架或中心,视图将在调用布局时恢复到其原始位置。
相反,您应该consider changing the constant value of the constraint
获得相同的效果。
考虑如下图所示的用户界面。我有一个带有 a 的图像视图,20 points leading space from it's superview
这意味着它的超级视图具有水平空间约束。此外,我还有三个附加到该图像视图的约束,顶部、宽度和高度。
我将向您展示我们如何从左到右为图像设置动画,如图所示。
为我们需要动画的约束创建 IBOutlet。这里我们只采用水平空间约束,这足以让这个视图从左向右移动。
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalSpaceConstraint;
在Go Away
action 内部,我们需要更新这个约束的常量值。
- (IBAction)moveFrontAction:(id)sender {
self.horizontalSpaceConstraint.constant = 220;
[UIView animateWithDuration:0.5 animations:^{
[self.imageView layoutIfNeeded];
}];
}
现在视图应该移动到右端。我只是在一个动画块内这样做,所以我们将能够从左到右看到一个漂亮的动画,反之亦然。在生产中,我们不应该硬编码像这样的值这个。只是在这里做是为了让这个概念更清楚。
在Come Back
动作内部,我们再次将常量重置为其原始值,因此您可以看到橙色图像动画回到原始位置。
- (IBAction)moveBackAction:(id)sender {
self.horizontalSpaceConstraint.constant = 20;
[UIView animateWithDuration:0.5 animations:^{
[self.imageView layoutIfNeeded];
}];
}
如果您使用自动布局,则必须更改约束。建议的方法是在约束的视图控制器中创建一个出口,然后更改约束的常量。如果你有时间,我肯定会推荐去这里观看“Auto Layout by Example”或“Best Practices for Mastering Auto Layout”。他们帮了我很多。我想要带走的一点是,使用自动布局,您不再考虑框架。因此,设置中心不适用于自动布局。这都是关于视图如何相互关联的。