使用Autolay的animation/移动视图

我想从一个位置移动到另一个位置,我可以使用它来实现它

self.view.center = CGPointMake(100, 200); 

但是,如果项目使用Autolayout,那么运行后视图将回到原始位置:

 [self.view.superview setNeedsLayout]; 

那么如何将视图移到新的位置?

如果使用autoLayout,则必须更改约束。 build议的方法是在约束的视图控制器中创build一个出口,然后更改约束的常量。 如果你有时间,我一定会推荐去这里看“自动布局的例子”或“掌握自动布局的最佳实践”。 他们帮了我很多。 我想要拿走的一点是,与autoLayout,你不再考虑框架。 所以设置中心不适用于自动布局。 这一切都是关于如何看待相互关联。

在启用AutoLayout ,我们应该只对AutoLayout FORGET FRAMES CONSIDER CONSTRAINTS ,并且只CONSIDER CONSTRAINTS 。对于animation,也不能再改变框架或中心,当调用布局时,视图将恢复到原来的位置。

相反,您应该consider changing the constant value of the constraint以获得相同的效果。

考虑一个像下面给出的图像的用户界面。我有一个图像视图与超级查看20 points leading space from it's superview意味着它有一个水平的空间约束与superview.Also我有三个约束附加到该图像视图,顶部,宽度和高度。

我将向您展示如何将图像从左到右进行animation显示,如图所示。

创buildIBOutlet的约束,我们需要animation。在这里我们只采用水平空间约束,这足以将这个视图从左到右。

 @property (weak, nonatomic) IBOutlet UIImageView *imageView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalSpaceConstraint; 

在这里输入图像说明

Go Away行动中,我们需要更新这个约束的常量值。

 - (IBAction)moveFrontAction:(id)sender { self.horizontalSpaceConstraint.constant = 220; [UIView animateWithDuration:0.5 animations:^{ [self.imageView layoutIfNeeded]; }]; } 

现在应该把视图移到最后。我只是在一个animation块中做这个,所以我们将能够从左到右看到一个很好的animation,反之亦然。在生产中,我们不应该像这只是在这里做这个概念清楚。

在这里输入图像说明

在“ Come Back操作中,我们再次将常量重新设置为原始值,以便您可以看到橙色图像回到原始位置。

 - (IBAction)moveBackAction:(id)sender { self.horizontalSpaceConstraint.constant = 20; [UIView animateWithDuration:0.5 animations:^{ [self.imageView layoutIfNeeded]; }]; }