add dynamicHidden and dynamicDrawing.

This commit is contained in:
PonyCui
2018-03-28 14:33:28 +08:00
parent f72db9b31b
commit 14514e3885
6 changed files with 96 additions and 6 deletions

View File

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

View File

@@ -7,12 +7,15 @@
//
#import <UIKit/UIKit.h>
#import "SVGAPlayer.h"
@class SVGABitmapLayer, SVGAVectorLayer, SVGAVideoSpriteFrameEntity;
@interface SVGAContentLayer : CALayer
@property (nonatomic, strong) NSString *imageKey;
@property (nonatomic, assign) BOOL dynamicHidden;
@property (nonatomic, copy) SVGAPlayerDynamicDrawingBlock dynamicDrawingBlock;
@property (nonatomic, strong) SVGABitmapLayer *bitmapLayer;
@property (nonatomic, strong) SVGAVectorLayer *vectorLayer;
@property (nonatomic, strong) CATextLayer *textLayer;

View File

@@ -31,6 +31,9 @@
}
- (void)stepToFrame:(NSInteger)frame {
if (self.dynamicHidden) {
return;
}
if (frame < self.frames.count) {
SVGAVideoSpriteFrameEntity *frameItem = self.frames[frame];
if (frameItem.alpha > 0.0) {
@@ -52,6 +55,9 @@
else {
self.hidden = YES;
}
if (self.dynamicDrawingBlock) {
self.dynamicDrawingBlock(self, frame);
}
}
}
@@ -81,4 +87,9 @@
[self addSublayer:vectorLayer];
}
- (void)setDynamicHidden:(BOOL)dynamicHidden {
_dynamicHidden = dynamicHidden;
self.hidden = dynamicHidden;
}
@end

View File

@@ -19,6 +19,8 @@
@end
typedef void(^SVGAPlayerDynamicDrawingBlock)(CALayer *contentLayer, NSInteger frameIndex);
@interface SVGAPlayer : UIView
@property (nonatomic, weak) id<SVGAPlayerDelegate> delegate;
@@ -41,6 +43,8 @@
- (void)setImageWithURL:(NSURL *)URL forKey:(NSString *)aKey;
- (void)setImage:(UIImage *)image forKey:(NSString *)aKey referenceLayer:(CALayer *)referenceLayer; // deprecated from 2.0.1
- (void)setAttributedText:(NSAttributedString *)attributedText forKey:(NSString *)aKey;
- (void)setDrawingBlock:(SVGAPlayerDynamicDrawingBlock)drawingBlock forKey:(NSString *)aKey;
- (void)setHidden:(BOOL)hidden forKey:(NSString *)aKey;
- (void)clearDynamicObjects;
@end

View File

@@ -19,8 +19,10 @@
@property (nonatomic, strong) CALayer *drawLayer;
@property (nonatomic, strong) CADisplayLink *displayLink;
@property (nonatomic, assign) NSInteger currentFrame;
@property (nonatomic, copy) NSDictionary *dynamicObjects;
@property (nonatomic, copy) NSDictionary *dynamicTexts;
@property (nonatomic, copy) NSDictionary<NSString *, UIImage *> *dynamicObjects;
@property (nonatomic, copy) NSDictionary<NSString *, NSAttributedString *> *dynamicTexts;
@property (nonatomic, copy) NSDictionary<NSString *, SVGAPlayerDynamicDrawingBlock> *dynamicDrawings;
@property (nonatomic, copy) NSDictionary<NSString *, NSNumber *> *dynamicHiddens;
@property (nonatomic, assign) int loopCount;
@property (nonatomic, assign) NSRange currentRange;
@property (nonatomic, assign) BOOL reversing;
@@ -137,6 +139,13 @@
[contentLayer addSublayer:textLayer];
contentLayer.textLayer = textLayer;
}
if (self.dynamicHiddens[sprite.imageKey] != nil &&
[self.dynamicHiddens[sprite.imageKey] boolValue] == YES) {
contentLayer.dynamicHidden = YES;
}
if (self.dynamicDrawings[sprite.imageKey] != nil) {
contentLayer.dynamicDrawingBlock = self.dynamicDrawings[sprite.imageKey];
}
}
}];
[self.layer addSublayer:self.drawLayer];
@@ -344,8 +353,39 @@
}
}
- (void)setDrawingBlock:(SVGAPlayerDynamicDrawingBlock)drawingBlock forKey:(NSString *)aKey {
NSMutableDictionary *mutableDynamicDrawings = [self.dynamicDrawings mutableCopy];
[mutableDynamicDrawings setObject:drawingBlock forKey:aKey];
self.dynamicDrawings = mutableDynamicDrawings;
if (self.drawLayer.sublayers.count > 0) {
for (SVGAContentLayer *layer in self.drawLayer.sublayers) {
if ([layer isKindOfClass:[SVGAContentLayer class]] &&
[layer.imageKey isEqualToString:aKey]) {
layer.dynamicDrawingBlock = drawingBlock;
}
}
}
}
- (void)setHidden:(BOOL)hidden forKey:(NSString *)aKey {
NSMutableDictionary *mutableDynamicHiddens = [self.dynamicHiddens mutableCopy];
[mutableDynamicHiddens setObject:@(hidden) forKey:aKey];
self.dynamicHiddens = mutableDynamicHiddens;
if (self.drawLayer.sublayers.count > 0) {
for (SVGAContentLayer *layer in self.drawLayer.sublayers) {
if ([layer isKindOfClass:[SVGAContentLayer class]] &&
[layer.imageKey isEqualToString:aKey]) {
layer.dynamicHidden = hidden;
}
}
}
}
- (void)clearDynamicObjects {
self.dynamicObjects = nil;
self.dynamicTexts = nil;
self.dynamicHiddens = nil;
self.dynamicDrawings = nil;
}
- (NSDictionary *)dynamicObjects {
@@ -362,4 +402,18 @@
return _dynamicTexts;
}
- (NSDictionary *)dynamicHiddens {
if (_dynamicHiddens == nil) {
_dynamicHiddens = @{};
}
return _dynamicHiddens;
}
- (NSDictionary<NSString *,SVGAPlayerDynamicDrawingBlock> *)dynamicDrawings {
if (_dynamicDrawings == nil) {
_dynamicDrawings = @{};
}
return _dynamicDrawings;
}
@end

View File

@@ -36,7 +36,7 @@ pod 'SVGAPlayer'
### code
```
```objectivec
SVGAParser *parser = [[SVGAParser alloc] init];
SVGAPlayer *player = [[SVGAPlayer alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
[self.view addSubview:player];
@@ -106,7 +106,7 @@ Use this way to replace specific image, or add text to it. (可以通过以下
#### Dynamic Image
```
```objectivec
CALayer *iconLayer = [CALayer layer];
iconLayer.cornerRadius = 84.0;
iconLayer.masksToBounds = YES;
@@ -119,7 +119,7 @@ iconLayer.borderColor = [UIColor colorWithRed:0xea/255.0 green:0xb3/255.0 blue:0
#### Dynamic Text
```
```objectivec
NSShadow *shadow = [NSShadow new];
shadow.shadowColor = [UIColor blackColor];
shadow.shadowOffset = CGSizeMake(0, 1);
@@ -133,3 +133,21 @@ NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"崔小
```
* Ask designer tell you the imageKey(or unzip the svga file, find it).
#### Dynamic Hidden
Now use setHidden to hide an element prevents drawing.
```objectivec
[self.aPlayer setHidden:YES forKey:@"99"];
```
#### Dynamic Drawing
You can set a block, it will callback while frame step.
```objectivec
[self.aPlayer setDrawingBlock:^(CALayer *contentLayer, NSInteger frameIndex) {
// do thing by yourself
} forKey:@"99"];
```