forked from svga/SVGAPlayer-iOS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSVGAContentLayer.m
More file actions
84 lines (73 loc) · 2.48 KB
/
SVGAContentLayer.m
File metadata and controls
84 lines (73 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//
// SVGAContentLayer.m
// SVGAPlayer
//
// Created by 崔明辉 on 2017/2/22.
// Copyright © 2017年 UED Center. All rights reserved.
//
#import "SVGAContentLayer.h"
#import "SVGABitmapLayer.h"
#import "SVGAVectorLayer.h"
#import "SVGAVideoSpriteFrameEntity.h"
@interface SVGAContentLayer ()
@property (nonatomic, strong) NSArray<SVGAVideoSpriteFrameEntity *> *frames;
@end
@implementation SVGAContentLayer
- (instancetype)initWithFrames:(NSArray *)frames {
self = [super init];
if (self) {
self.backgroundColor = [UIColor clearColor].CGColor;
self.masksToBounds = NO;
_frames = frames;
[self stepToFrame:0];
}
return self;
}
- (void)stepToFrame:(NSInteger)frame {
if (frame < self.frames.count) {
SVGAVideoSpriteFrameEntity *frameItem = self.frames[frame];
if (frameItem.alpha > 0.0) {
self.hidden = NO;
self.opacity = frameItem.alpha;
CGFloat nx = frameItem.nx;
CGFloat ny = frameItem.ny;
self.position = CGPointMake(0, 0);
self.transform = CATransform3DIdentity;
self.frame = frameItem.layout;
self.transform = CATransform3DMakeAffineTransform(frameItem.transform);
CGFloat offsetX = self.frame.origin.x - nx;
CGFloat offsetY = self.frame.origin.y - ny;
self.position = CGPointMake(self.position.x - offsetX, self.position.y - offsetY);
self.mask = frameItem.maskLayer;
[self.bitmapLayer stepToFrame:frame];
[self.vectorLayer stepToFrame:frame];
}
else {
self.hidden = YES;
}
}
}
- (void)setFrame:(CGRect)frame {
[super setFrame:frame];
self.bitmapLayer.frame = self.bounds;
self.vectorLayer.frame = self.bounds;
for (CALayer *sublayer in self.sublayers) {
if ([sublayer isKindOfClass:[CATextLayer class]]) {
CGRect frame = sublayer.frame;
frame.origin.x = (self.frame.size.width - sublayer.frame.size.width) / 2.0;
frame.origin.y = (self.frame.size.height - sublayer.frame.size.height) / 2.0;
sublayer.frame = frame;
}
}
}
- (void)setBitmapLayer:(SVGABitmapLayer *)bitmapLayer {
[_bitmapLayer removeFromSuperlayer];
_bitmapLayer = bitmapLayer;
[self addSublayer:bitmapLayer];
}
- (void)setVectorLayer:(SVGAVectorLayer *)vectorLayer {
[_vectorLayer removeFromSuperlayer];
_vectorLayer = vectorLayer;
[self addSublayer:vectorLayer];
}
@end