基本的 UIAnimation

Basic UIAnimation

这是一个非常基本的问题,但这是我第一次在应用程序中制作任何动画。

我有以下情况。显示带有一些文本的视图 1,并且在某个时间其他视图 2 和 3 应该在第一个视图上从顶部向下推动画。

目前我在故事板中使用自动布局。当我想要动画或继续使用它时,我应该停止这样做吗? 我是否必须以编程方式 add/update 约束或 show/hidden 视图?

我试过 show/hidden 但它似乎对我不起作用。尝试此操作时,我添加了所有视图(右图),然后将视图 2 和 3 设置为隐藏,希望底部视图自动上升,但这没有用...

我没有尝试手动设置约束,因为我以前从未做过。我对应该如何完成有一个基本的了解,但想先知道它是否可行?

我建立了一个非常基本的项目来说明我的答案。你可以找到它here。几乎所有事情都在 IB 中完成。左边的红色视图固定在屏幕顶部,并且此约束连接到 ViewController.m 中的 IBOutlet。其他视图的位置取决于左侧红色视图的位置。我们两次更改此约束的常量值 - 第一次是在 VC 已加载但尚未出现在屏幕上之后,将红色视图移出屏幕。第二次,当按下按钮时,我们将约束更改为原来的状态并强制使用动画进行布局。差不多就这些了。

 #import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *redViewTopConstraint;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.redViewTopConstraint.constant = - ([UIScreen mainScreen].bounds.size.width * 0.3 + 20);
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (IBAction)action:(id)sender {

    self.redViewTopConstraint.constant = 20;

    [UIView animateWithDuration:0.5f delay:0 usingSpringWithDamping:0.65f initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState animations:^{
        [self.view layoutIfNeeded];
    } completion:nil];


}

@end