1 // 简单block动画
2 - (IBAction)simpleBlock:(UIButton *)sender{
3 [UIView animateWithDuration:2 animations:^{
4 CGPoint point = self.planeImageView.center;
5 point.y += 100;
6 self.planeImageView.center = point;
7 } completion:^(BOOL finished) {
8 NSLog(@"动画结束");
9 [UIView animateWithDuration:2 animations:^{
10 CGPoint point = self.planeImageView.center;
11 point.y -= 100;
12 self.planeImageView.center = point;
13 } completion:nil];
14
15 }];
16 }
1 // 复杂的block
2 - (IBAction)complexBlock:(UIButton *)sender {
3 [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
4 self.planeImageView.transform = CGAffineTransformRotate(self.planeImageView.transform, M_PI / 180 * 90);
5 } completion:^(BOOL finished) {
6 // 还原到初始形变
7 // self.planeImageView.transform = CGAffineTransformIdentity;
8 }];
9 }
1 // 过度动画, 转场动画
2 - (IBAction)transitionAnimation:(UIButton *)sender {
3 [UIView beginAnimations:nil context:nil];
4 [UIView setAnimationDuration:2];
5 // 第一个参数: 转场动画的类型
6 // 第二个参数: 给哪个对象添加转场动画
7 // 第三个参数: 缓存设置(YES执行效率更高)
8 [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.label cache:YES];
9 self.label.text = @"熊大熊二的故事";
10 [UIView commitAnimations];
11 }
1 // 弹簧动画
2 - (IBAction)sprintAnimation:(UIButton *)sender {
3 // 1. 动画时长
4 // 2. 延迟时间
5 // 3. 阻尼系数, 越大, 弹簧形变越小
6 // 4. 速度
7 // 5. 动画类型选项
8 [UIView animateWithDuration:2 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:10 options:UIViewAnimationOptionCurveLinear animations:^{
9 CGPoint point = self.planeImageView.center;
10 point.y += 260;
11 self.planeImageView.center = point;
12
13 } completion:^(BOOL finished) {
14 NSLog(@"动画结束");
15 }];
16 }
大家可以发现,第二种实现方式实际上是对第一种方式使用了Block封装,相对来说,第二种实现方式更加的方便。而仔细看核心动画和UIView动画,我们也可以发现,实际上,UIView动画就是对核心动画的封装,使用起来更加的方便。