mirror of
https://github.com/svga/SVGAPlayer-iOS.git
synced 2025-10-20 23:19:13 +08:00
add dynamicHidden and dynamicDrawing.
This commit is contained in:
@@ -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 主导开发。
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
24
readme.md
24
readme.md
@@ -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"];
|
||||
```
|
Reference in New Issue
Block a user