Autolayout动画保持UILabel为中心

时间:2013-10-28 19:22:16

标签: ios objective-c animation autolayout

我正在编写一个iOS 7应用程序,我有一个带有标签的矩形。标签与中心对齐,并且与视图的大小相同(为了简化增加大小)。

单击时,所需的效果是将视图设置为完整大小,标签始终保持居中。

我目前已经尝试过:

  • 将标签上的顶部,左侧,底部和右侧约束设置为0
  • 将标签的高度和宽度设置为初始尺寸的视图,并将其设置为完整尺寸以及视图动画
  • 将标签的顶部和左侧约束设置为0,并将尺寸设置为完整尺寸

这些都不会产生所需的输出。每次标签看起来只是在视图开始动画之前捕捉到它的最终大小。

这是我的代码:

_viewHeightConstraint.constant = self.view.frame.size.height;
_viewWidthConstraint.constant = self.view.frame.size.width;
_viewTopConstraint.constant = 0;
_viewLeftConstraint.constant = 0;

_labelWidthConstraint.constant = self.view.frame.size.width;
_labelHeightConstraint.constant = self.view.frame.size.height;
[self.view needsUpdateConstraints];

[UIView animateWithDuration:1.5f
                 animations:^(void) {
                     [self.myView layoutIfNeeded]; //perform relayout of view containing label before relayout of entire view
                     [self.view layoutIfNeeded];
                 }];

我不确定我是否提供了必要的一切,因为我还不熟悉autolayout。但是,所需的效果是在中心的标签保持居中时动画为全尺寸的视图。

2 个答案:

答案 0 :(得分:0)

将这些约束添加到您的标签:

(UIViewAutoresizingFlexibleLeftMargin   | 
 UIViewAutoresizingFlexibleRightMargin  | 
 UIViewAutoresizingFlexibleTopMargin    | 
 UIViewAutoresizingFlexibleBottomMargin)

答案 1 :(得分:0)

为什么要调用needsUpdateConstraints?

所有变化都发生在那里。请致电:

...
_labelWidthConstraint.constant = self.view.frame.size.width;
_labelHeightConstraint.constant = self.view.frame.size.height;

 [UIView animateWithDuration:1.5f
             animations:^(void) {
                 [self.view layoutIfNeeded];
 }];

另外,为什么要在标签上设置高度和宽度限制?您可以添加中心水平和垂直约束。我不认为你可以为标签设置垂直文本对齐方式。但那不是你最初的问题。