实现动画方式深度解析(二十四) —— CoreAnimation框架CADisplay动画之一个简单示例(一)

版本记录

版本号 时间
V1.0 2017.12.03

前言

app中好的炫的动画可以让用户耳目一新,为产品增色不少,关于动画的实现我们可以用基本动画、关键帧动画、序列帧动画以及基于CoreGraphic的动画等等,接下来这几篇我就介绍下我可以想到的几种动画绘制方法。感兴趣的可以看我写的另外几篇。
1. 实现动画方式深度解析(一) —— 播放GIF动画(一)
2. 实现动画方式深度解析(二) —— 播放GIF动画之框架FLAnimatedImage的使用(二)
3. 实现动画方式深度解析(三) —— 播放序列帧动画(一)
4. 实现动画方式深度解析(四) —— QuartzCore框架(一)
5. 实现动画方式深度解析(五) —— QuartzCore框架之CoreAnimation(二)
6. 实现动画方式深度解析(六) —— Core Animation Basics(三)
7. 实现动画方式深度解析(七) —— Core Animation之Setting Up Layer Objects(四)
8. 实现动画方式深度解析(八) —— Core Animation之动画层内容 (五)
9. 实现动画方式深度解析(九) —— Core Animation之构建图层层级 (六)
10. 实现动画方式深度解析(十) —— Core Animation之高级动画技巧 (七)
11. 实现动画方式深度解析(十一) —— Core Animation之更改图层的默认行为(八)
12. 实现动画方式深度解析(十二) —— Core Animation之提高动画的性能(九)
13. 实现动画方式深度解析(十三) —— Core Animation之图层样式属性动画(十)
14. 实现动画方式深度解析(十四) —— Core Animation之 KVC 扩展(十一)
15. 实现动画方式深度解析(十五) —— Core Animation之可动画属性 (十二)
16. 实现动画方式深度解析(十六) —— Core Animation之CABasicAnimation动画示例 (十三)
17. 实现动画方式深度解析(十七) —— Core Animation之CAKeyframeAnimation动画示例 (十四)
18. 实现动画方式深度解析(十八) —— UIView动画 (一)
19. 实现动画方式深度解析(十九) —— Lottie - iOS动画 (一)
20. 实现动画方式深度解析(二十) —— Lottie - iOS动画之示例分享 (二)
21. 实现动画方式深度解析(二十一) —— Keyframes动画之框架基本 (一)
22. 实现动画方式深度解析(二十二) —— Keyframes动画之简单示例(二)
23. 实现动画方式深度解析(二十三) —— CoreGraphic动画(一)

实现需求

利用CoreAnimation框架的CADisplayLink类实现简单的动画,实现图中鸟图案变换image。感兴趣的可以参考DemoGitHub - 刀客传奇


实现过程

下面我们就看一下代码。

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, assign) BOOL isRedBird;

@end

@implementation ViewController

#pragma mark - Override Base Function

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor lightGrayColor];
    
    self.imageView = [[UIImageView alloc] init];
    self.imageView.frame = CGRectMake(100, 300, 200, 200);
    [self.view addSubview:self.imageView];
    
    self.isRedBird = YES;
    
    CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(startAnimation)];
    if ([[UIDevice currentDevice].systemVersion floatValue] < 10.0) {
        displayLink.frameInterval = 60/20;
    }
    else {
        displayLink.preferredFramesPerSecond = 60/20;
    }
    
    [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}

#pragma mark - Action && Notification

- (void)startAnimation
{
    if (self.isRedBird) {
        self.imageView.image = [UIImage imageNamed:@"bird_red"];
    }
    else {
        self.imageView.image = [UIImage imageNamed:@"bird_blue"];
    }
    
    self.isRedBird = !self.isRedBird;
}

@end

这里,1s的刷新频率为60/(displayLink.frameInterval) = 20次,这里都是最简单的动画了,CADisplayLink大家可以理解为比NSTimer更加精确的定时器。


实现效果

下面我们看一下实现的效果。

实现动画方式深度解析(二十四) —— CoreAnimation框架CADisplay动画之一个简单示例(一)_第1张图片

可以看见,这个动画很简单很好实现。

后记

未完,待续~~~

实现动画方式深度解析(二十四) —— CoreAnimation框架CADisplay动画之一个简单示例(一)_第2张图片

你可能感兴趣的:(实现动画方式深度解析(二十四) —— CoreAnimation框架CADisplay动画之一个简单示例(一))