Autolayout 下的 Animation

习惯了用 autosizing masks 来布局UI,感觉用起来又快又熟,但在支持多尺寸屏幕适配下,还是需要使用Autolayout(以及 iOS8 出来的sizeclass)。而为了用户体验,我们又经常用到Animation,如改变一个View的高度,常用方式是:

[UIView animateWithDuration:.5f
                  animations:^{
                      CGRect theFrame = _topView.frame;
                      theFrame.size.width -= 100;
                      worldView.frame = theFrame;
                  }];


但在autolayout下,运行动画,会发现目标view并没有按照我们想要的动画, 也尝试过 Disable auto layout:
_topView.translatesAutoresizingMaskIntoConstraints = YES;
然后在运行,动画达到效果,但是 在底部 All Output 窗口打印出以下信息:

原来在此情况下,不是通过改变frame,而是操作Constant来改变控件的尺寸位置,所以将目标View的Height Constraint 约束拖到.h或者.m文件中如下:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topViewHeightConstraint;

动画则变为:

 _topViewHeightConstraint.constant -= 100;// Update constraints
    [UIView animateWithDuration:.3
                     animations:^{
                         [self.view layoutIfNeeded];// Flush out frames
                     }];
本人也是最近才开始用 Autolayout(以及 iOS8 出来的sizeclass),初尝甜头感受到适配的便捷后,今天用到动画时,遇到此问题,简单笔记下,附上午休写的一个小Demo,加以了解!


Demo下载地址




你可能感兴趣的:(ios,layout,ios8,animation,Xcode6)