实现动画方式深度解析(二十二) —— Keyframes动画之简单示例(二)

版本记录

版本号 时间
V1.0 2017.09.26

前言

app中好的炫的动画可以让用户耳目一新,为产品增色不少,关于动画的实现我们可以用基本动画、关键帧动画、序列帧动画以及基于CoreGraphic的动画等等,接下来这几篇我就介绍下我可以想到的几种动画绘制方法。具体Demo示例已开源到Github —— 刀客传奇,感兴趣的可以看我写的另外几篇。
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动画之框架基本 (一)

功能要求

利用框架Keyframes实现一个简单的动画。


功能实现

具体如何安装框架就不多说了,这里就是直接给代码了。

#import "ViewController.h"
#import 
#import 
#import 
#import 

@interface ViewController ()

@end

@implementation ViewController

#pragma mark - Override Base Function

- (void)viewDidLoad
{
    [super viewDidLoad];

    KFVector *sampleVector = [self loadSampleVectorFromDisk];
    
    KFVectorLayer *sampleVectorLayer = [KFVectorLayer new];
    const CGFloat shortSide = MIN(CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds));
    const CGFloat longSide = MAX(CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds));
    sampleVectorLayer.frame = CGRectMake(shortSide / 4, longSide / 2 - shortSide / 4, shortSide / 2, shortSide / 2);
    sampleVectorLayer.faceModel = sampleVector;
    [self.view.layer addSublayer:sampleVectorLayer];
    [sampleVectorLayer startAnimation];
}

#pragma mark - Object Private Function

- (KFVector *)loadSampleVectorFromDisk
{
    static KFVector *sampleVector;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sample_logo" ofType:@"json"];
        NSData *data = [NSData dataWithContentsOfFile:filePath];
        NSDictionary *sampleVectorDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        sampleVector = KFVectorFromDictionary(sampleVectorDictionary);
    });
    return sampleVector;
}

@end

这里还有个小的插曲,就是我加载json文件的时候,怎么都找不到,都是nil,后来才找到了原因。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sample_logo" ofType:@"json"];

原来是没有copy进去,按照下图所示加一下就好了。

实现动画方式深度解析(二十二) —— Keyframes动画之简单示例(二)_第1张图片

功能效果

下面我们看一下功能效果。

实现动画方式深度解析(二十二) —— Keyframes动画之简单示例(二)_第2张图片

后记

未完,待续~~~~

实现动画方式深度解析(二十二) —— Keyframes动画之简单示例(二)_第3张图片

你可能感兴趣的:(实现动画方式深度解析(二十二) —— Keyframes动画之简单示例(二))