首页 iOS开发:动画UIView Animation
文章
取消

iOS开发:动画UIView Animation

在iOS开发中,动画效果可以让应用更加生动、吸引人的眼球,提升用户体验。UIView是iOS中常用的视图控件,其内置了许多动画效果API,能够轻松实现各种动画效果。本文将从基础知识到高阶应用,全面详细地讲解如何使用UIView来实现动画效果。

动画的本质

动画就是将一系列静态的图片连续播放,以达到运动的效果。在iOS中,动画的本质也是如此,只不过是通过改变视图的属性值,使其在一段时间内呈现出一种渐变的效果。

动画的两种实现方式

在UIView中,实现动画效果有两种方式:

  • 使用block-based API
  • 使用核心动画(Core Animation)

对于简单的动画效果,使用block-based API即可;而对于较为复杂的动画效果,使用核心动画会更加方便,也更加灵活。

动画的主要属性

在UIView中,常用的动画属性有以下几个:

  • frame:视图的位置和大小
  • bounds:视图内容的大小
  • center:视图的中心点坐标
  • alpha:视图的透明度
  • backgroundColor:视图的背景颜色
  • transform:视图的形变效果,如旋转,缩放,平移等
  • contentStretch:拉伸视图内容的边界区域

动画选项

在使用UIView动画时,可以使用动画选项来控制动画的一些行为。以下是一些常用的动画选项:

  • UIViewAnimationOptionCurveEaseInOut:动画由慢至快再由快至慢
  • UIViewAnimationOptionCurveEaseIn:动画由慢至快
  • UIViewAnimationOptionCurveEaseOut:动画由快至慢
  • UIViewAnimationOptionCurveLinear:动画匀速进行
  • UIViewAnimationOptionAutoreverse:使动画在完成后自动反转。
  • UIViewAnimationOptionRepeat:使动画重复执行。

动画的基本使用

基本动画

UIView中提供了一个非常简单易用的方法,可以帮助我们实现简单的动画效果:

1
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;

其中,duration表示动画时长,animations是一个block,用来设置动画的属性值。

例如,下面这段代码可以实现一个简单的位移动画。在1秒钟内,将self.view的中心点移动到坐标(200, 200)处。

1
2
3
[UIView animateWithDuration:1.0 animations:^{
    self.view.center = CGPointMake(200, 200);
}];

动画的回调

在UIView的动画API中,还允许我们设置动画完成后的回调函数:

1
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

其中,completion是一个block,用来处理动画完成后的操作。

例如,下面这段代码可以实现一个动画完成后输出log信息的功能。

1
2
3
4
5
[UIView animateWithDuration:1.0 animations:^{
    self.view.center = CGPointMake(200, 200);
} completion:^(BOOL finished) {
    NSLog(@"animation completed!");
}];

关键帧动画

UIView的关键帧动画API可以让我们实现更为复杂的动画效果。关键帧动画就是指,在动画过程中,设置多个关键帧,每个关键帧都有自己的属性值,通过这些关键帧组合起来,形成一个复杂的动画效果。

例如,下面这段代码可以实现一个关键帧动画。在3秒钟内,将self.view旋转四次,每次旋转90度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[UIView animateKeyframesWithDuration:3.0 delay:0.0 options:0 animations:^{
	// 第一帧
    [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.25 animations:^{
        self.view.transform = CGAffineTransformMakeRotation(M_PI_4);
    }];
	// 第二帧
    [UIView addKeyframeWithRelativeStartTime:0.25 relativeDuration:0.25 animations:^{
        self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
    }];
	// 第三帧
    [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
        self.view.transform = CGAffineTransformMakeRotation(3 * M_PI_4);
    }];
	// 第四帧
    [UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.25 animations:^{
        self.view.transform = CGAffineTransformMakeRotation(2 * M_PI);
    }];
} completion:nil];

转场动画

UIView还提供了一个特殊的动画效果,叫做转场动画(Transition Animation)。转场动画通常用于在两个视图之间进行切换,比如在切换页面时使用。

例如,下面这段代码可以实现一个转场动画。在1秒钟内,将self.view的背景颜色从原来的颜色翻转到红色。

1
2
3
[UIView transitionWithView:self.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
    self.view.backgroundColor = [UIColor redColor];
} completion:nil];

UIViewPropertyAnimator

UIViewPropertyAnimator是iOS 10中新增的动画类,它可以让我们更加方便地管理动画效果。相比于上面介绍的UIView的动画API,UIViewPropertyAnimator提供了更多的控制选项,比如暂停、恢复、反向等。

例如,下面这段代码可以实现一个使用UIViewPropertyAnimator的动画,并添加暂停、恢复和反转功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UIViewPropertyAnimator *animator = [[UIViewPropertyAnimator alloc] initWithDuration:2.0 curve:UIViewAnimationCurveEaseInOut animations:^{
    self.view.center = CGPointMake(200, 200);
}];
[animator startAnimation];

// 暂停动画
[animator pauseAnimation];

// 恢复动画
[animator continueAnimationWithTimingParameters:nil durationFactor:0.0];

// 反转动画
[animator isReversed] ? [animator setReversed:NO] : [animator setReversed:YES];

// 结束动画
[animator stopAnimation:YES];
本文由作者按照 CC BY 4.0 进行授权

ERROR ITMS-90167和primary language主要语言问题

iOS开发:核心动画Core Animation