Skip to content

Commit 14514e3

Browse files
committed
add dynamicHidden and dynamicDrawing.
1 parent f72db9b commit 14514e3

File tree

6 files changed

+96
-6
lines changed

6 files changed

+96
-6
lines changed

SVGAPlayer.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Pod::Spec.new do |s|
33
s.name = "SVGAPlayer"
4-
s.version = "2.1.1"
4+
s.version = "2.1.2"
55
s.summary = "SVGAPlayer 是一个高性能的动画播放器"
66
s.description = <<-DESC
77
SVGA 是一个私有的动画格式,由 YY UED 主导开发。

Source/SVGAContentLayer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
//
88

99
#import <UIKit/UIKit.h>
10+
#import "SVGAPlayer.h"
1011

1112
@class SVGABitmapLayer, SVGAVectorLayer, SVGAVideoSpriteFrameEntity;
1213

1314
@interface SVGAContentLayer : CALayer
1415

1516
@property (nonatomic, strong) NSString *imageKey;
17+
@property (nonatomic, assign) BOOL dynamicHidden;
18+
@property (nonatomic, copy) SVGAPlayerDynamicDrawingBlock dynamicDrawingBlock;
1619
@property (nonatomic, strong) SVGABitmapLayer *bitmapLayer;
1720
@property (nonatomic, strong) SVGAVectorLayer *vectorLayer;
1821
@property (nonatomic, strong) CATextLayer *textLayer;

Source/SVGAContentLayer.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ - (instancetype)initWithFrames:(NSArray *)frames {
3131
}
3232

3333
- (void)stepToFrame:(NSInteger)frame {
34+
if (self.dynamicHidden) {
35+
return;
36+
}
3437
if (frame < self.frames.count) {
3538
SVGAVideoSpriteFrameEntity *frameItem = self.frames[frame];
3639
if (frameItem.alpha > 0.0) {
@@ -52,6 +55,9 @@ - (void)stepToFrame:(NSInteger)frame {
5255
else {
5356
self.hidden = YES;
5457
}
58+
if (self.dynamicDrawingBlock) {
59+
self.dynamicDrawingBlock(self, frame);
60+
}
5561
}
5662
}
5763

@@ -81,4 +87,9 @@ - (void)setVectorLayer:(SVGAVectorLayer *)vectorLayer {
8187
[self addSublayer:vectorLayer];
8288
}
8389

90+
- (void)setDynamicHidden:(BOOL)dynamicHidden {
91+
_dynamicHidden = dynamicHidden;
92+
self.hidden = dynamicHidden;
93+
}
94+
8495
@end

Source/SVGAPlayer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
@end
2121

22+
typedef void(^SVGAPlayerDynamicDrawingBlock)(CALayer *contentLayer, NSInteger frameIndex);
23+
2224
@interface SVGAPlayer : UIView
2325

2426
@property (nonatomic, weak) id<SVGAPlayerDelegate> delegate;
@@ -41,6 +43,8 @@
4143
- (void)setImageWithURL:(NSURL *)URL forKey:(NSString *)aKey;
4244
- (void)setImage:(UIImage *)image forKey:(NSString *)aKey referenceLayer:(CALayer *)referenceLayer; // deprecated from 2.0.1
4345
- (void)setAttributedText:(NSAttributedString *)attributedText forKey:(NSString *)aKey;
46+
- (void)setDrawingBlock:(SVGAPlayerDynamicDrawingBlock)drawingBlock forKey:(NSString *)aKey;
47+
- (void)setHidden:(BOOL)hidden forKey:(NSString *)aKey;
4448
- (void)clearDynamicObjects;
4549

4650
@end

Source/SVGAPlayer.m

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ @interface SVGAPlayer ()
1919
@property (nonatomic, strong) CALayer *drawLayer;
2020
@property (nonatomic, strong) CADisplayLink *displayLink;
2121
@property (nonatomic, assign) NSInteger currentFrame;
22-
@property (nonatomic, copy) NSDictionary *dynamicObjects;
23-
@property (nonatomic, copy) NSDictionary *dynamicTexts;
22+
@property (nonatomic, copy) NSDictionary<NSString *, UIImage *> *dynamicObjects;
23+
@property (nonatomic, copy) NSDictionary<NSString *, NSAttributedString *> *dynamicTexts;
24+
@property (nonatomic, copy) NSDictionary<NSString *, SVGAPlayerDynamicDrawingBlock> *dynamicDrawings;
25+
@property (nonatomic, copy) NSDictionary<NSString *, NSNumber *> *dynamicHiddens;
2426
@property (nonatomic, assign) int loopCount;
2527
@property (nonatomic, assign) NSRange currentRange;
2628
@property (nonatomic, assign) BOOL reversing;
@@ -137,6 +139,13 @@ - (void)draw {
137139
[contentLayer addSublayer:textLayer];
138140
contentLayer.textLayer = textLayer;
139141
}
142+
if (self.dynamicHiddens[sprite.imageKey] != nil &&
143+
[self.dynamicHiddens[sprite.imageKey] boolValue] == YES) {
144+
contentLayer.dynamicHidden = YES;
145+
}
146+
if (self.dynamicDrawings[sprite.imageKey] != nil) {
147+
contentLayer.dynamicDrawingBlock = self.dynamicDrawings[sprite.imageKey];
148+
}
140149
}
141150
}];
142151
[self.layer addSublayer:self.drawLayer];
@@ -344,8 +353,39 @@ - (void)setAttributedText:(NSAttributedString *)attributedText forKey:(NSString
344353
}
345354
}
346355

356+
- (void)setDrawingBlock:(SVGAPlayerDynamicDrawingBlock)drawingBlock forKey:(NSString *)aKey {
357+
NSMutableDictionary *mutableDynamicDrawings = [self.dynamicDrawings mutableCopy];
358+
[mutableDynamicDrawings setObject:drawingBlock forKey:aKey];
359+
self.dynamicDrawings = mutableDynamicDrawings;
360+
if (self.drawLayer.sublayers.count > 0) {
361+
for (SVGAContentLayer *layer in self.drawLayer.sublayers) {
362+
if ([layer isKindOfClass:[SVGAContentLayer class]] &&
363+
[layer.imageKey isEqualToString:aKey]) {
364+
layer.dynamicDrawingBlock = drawingBlock;
365+
}
366+
}
367+
}
368+
}
369+
370+
- (void)setHidden:(BOOL)hidden forKey:(NSString *)aKey {
371+
NSMutableDictionary *mutableDynamicHiddens = [self.dynamicHiddens mutableCopy];
372+
[mutableDynamicHiddens setObject:@(hidden) forKey:aKey];
373+
self.dynamicHiddens = mutableDynamicHiddens;
374+
if (self.drawLayer.sublayers.count > 0) {
375+
for (SVGAContentLayer *layer in self.drawLayer.sublayers) {
376+
if ([layer isKindOfClass:[SVGAContentLayer class]] &&
377+
[layer.imageKey isEqualToString:aKey]) {
378+
layer.dynamicHidden = hidden;
379+
}
380+
}
381+
}
382+
}
383+
347384
- (void)clearDynamicObjects {
348385
self.dynamicObjects = nil;
386+
self.dynamicTexts = nil;
387+
self.dynamicHiddens = nil;
388+
self.dynamicDrawings = nil;
349389
}
350390

351391
- (NSDictionary *)dynamicObjects {
@@ -362,4 +402,18 @@ - (NSDictionary *)dynamicTexts {
362402
return _dynamicTexts;
363403
}
364404

405+
- (NSDictionary *)dynamicHiddens {
406+
if (_dynamicHiddens == nil) {
407+
_dynamicHiddens = @{};
408+
}
409+
return _dynamicHiddens;
410+
}
411+
412+
- (NSDictionary<NSString *,SVGAPlayerDynamicDrawingBlock> *)dynamicDrawings {
413+
if (_dynamicDrawings == nil) {
414+
_dynamicDrawings = @{};
415+
}
416+
return _dynamicDrawings;
417+
}
418+
365419
@end

readme.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pod 'SVGAPlayer'
3636

3737
### code
3838

39-
```
39+
```objectivec
4040
SVGAParser *parser = [[SVGAParser alloc] init];
4141
SVGAPlayer *player = [[SVGAPlayer alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
4242
[self.view addSubview:player];
@@ -106,7 +106,7 @@ Use this way to replace specific image, or add text to it. (可以通过以下
106106
107107
#### Dynamic Image
108108
109-
```
109+
```objectivec
110110
CALayer *iconLayer = [CALayer layer];
111111
iconLayer.cornerRadius = 84.0;
112112
iconLayer.masksToBounds = YES;
@@ -119,7 +119,7 @@ iconLayer.borderColor = [UIColor colorWithRed:0xea/255.0 green:0xb3/255.0 blue:0
119119

120120
#### Dynamic Text
121121

122-
```
122+
```objectivec
123123
NSShadow *shadow = [NSShadow new];
124124
shadow.shadowColor = [UIColor blackColor];
125125
shadow.shadowOffset = CGSizeMake(0, 1);
@@ -133,3 +133,21 @@ NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"崔小
133133
```
134134
135135
* Ask designer tell you the imageKey(or unzip the svga file, find it).
136+
137+
#### Dynamic Hidden
138+
139+
Now use setHidden to hide an element prevents drawing.
140+
141+
```objectivec
142+
[self.aPlayer setHidden:YES forKey:@"99"];
143+
```
144+
145+
#### Dynamic Drawing
146+
147+
You can set a block, it will callback while frame step.
148+
149+
```objectivec
150+
[self.aPlayer setDrawingBlock:^(CALayer *contentLayer, NSInteger frameIndex) {
151+
// do thing by yourself
152+
} forKey:@"99"];
153+
```

0 commit comments

Comments
 (0)