Add Dynamic Image.

This commit is contained in:
PonyCui
2016-10-13 17:48:14 +08:00
parent 4816558354
commit 9fa588950f
3 changed files with 95 additions and 18 deletions

View File

@@ -26,25 +26,50 @@
self.aPlayer.loops = 0;
self.aPlayer.clearsAfterStop = YES;
SVGAParser *parser = [[SVGAParser alloc] init];
[parser parseWithURL:[NSURL URLWithString:@"http://uedfe.yypm.com/assets/svga-me/rose.svga"] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
if (videoItem != nil) {
self.aPlayer.videoItem = videoItem;
[self.aPlayer startAnimation];
// [parser parseWithURL:[NSURL URLWithString:@"http://uedfe.yypm.com/assets/svga-me/rose.svga"] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
// if (videoItem != nil) {
// self.aPlayer.videoItem = videoItem;
// [self.aPlayer startAnimation];
// }
// } failureBlock:nil];
// Dynamic Object Sample
[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://img.hb.aicdn.com/80cc8e001ccdc54febd448dc45119b4bd7924ea5530b-RllWp3_sq320"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data != nil) {
UIImage *iconImage = [UIImage imageWithData:data];
if (iconImage != nil) {
[parser parseWithURL:[NSURL URLWithString:@"http://uedfe.yypm.com/assets/svga-me/kingset_dyn.svga"] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
if (videoItem != nil) {
{
CALayer *iconLayer = [CALayer layer];
iconLayer.cornerRadius = 84.0;
iconLayer.masksToBounds = YES;
iconLayer.borderWidth = 4.0;
iconLayer.borderColor = [UIColor colorWithRed:0xea/255.0 green:0xb3/255.0 blue:0x7d/255.0 alpha:1.0].CGColor;
[self.aPlayer setImage:iconImage forKey:@"99" referenceLayer:iconLayer];
}
self.aPlayer.videoItem = videoItem;
[self.aPlayer startAnimation];
}
} failureBlock:nil];
}
}
} failureBlock:nil];
}] resume];
}
- (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player {
NSLog(@"finished.");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
SVGAParser *parser = [[SVGAParser alloc] init];
[parser parseWithURL:[NSURL URLWithString:@"http://uedfe.yypm.com/assets/svga-me/rose.svga"] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
if (videoItem != nil) {
self.aPlayer.videoItem = videoItem;
[self.aPlayer startAnimation];
}
} failureBlock:nil];
});
// NSLog(@"finished.");
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// SVGAParser *parser = [[SVGAParser alloc] init];
// [parser parseWithURL:[NSURL URLWithString:@"http://uedfe.yypm.com/assets/svga-me/rose.svga"] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
// if (videoItem != nil) {
// self.aPlayer.videoItem = videoItem;
// [self.aPlayer startAnimation];
// }
// } failureBlock:nil];
// });
}
- (void)viewWillLayoutSubviews {

View File

@@ -24,9 +24,13 @@
@property (nonatomic, assign) int loops;
@property (nonatomic, assign) BOOL clearsAfterStop;
- (void)startAnimation;
- (void)stopAnimation;
- (void)clear;
#pragma mark - Dynamic Object
- (void)setImage:(UIImage *)image forKey:(NSString *)aKey referenceLayer:(CALayer *)referenceLayer;
- (void)clearDynamicObjects;
@end

View File

@@ -16,6 +16,8 @@
@property (nonatomic, strong) CALayer *drawLayer;
@property (nonatomic, strong) CADisplayLink *displayLink;
@property (nonatomic, assign) int currentFrame;
@property (nonatomic, copy) NSDictionary *dynamicObjects;
@property (nonatomic, copy) NSDictionary *dynamicLayers;
@end
@@ -62,8 +64,19 @@
[self.videoItem.sprites enumerateObjectsUsingBlock:^(SVGAVideoSpriteEntity * _Nonnull sprite, NSUInteger idx, BOOL * _Nonnull stop) {
CALayer *spriteLayer = [[CALayer alloc] init];
spriteLayer.contentsGravity = kCAGravityResizeAspect;
spriteLayer.contents = (__bridge id _Nullable)([self.videoItem.images[sprite.imageKey] CGImage]);
[self.drawLayer addSublayer:spriteLayer];
if (sprite.imageKey != nil) {
if (self.dynamicLayers[sprite.imageKey] != nil) {
spriteLayer = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self.dynamicLayers[sprite.imageKey]]];
spriteLayer.contentsGravity = kCAGravityResizeAspect;
}
if (self.dynamicObjects[sprite.imageKey] != nil) {
spriteLayer.contents = (__bridge id _Nullable)([self.dynamicObjects[sprite.imageKey] CGImage]);
}
else {
spriteLayer.contents = (__bridge id _Nullable)([self.videoItem.images[sprite.imageKey] CGImage]);
}
[self.drawLayer addSublayer:spriteLayer];
}
}];
[self.layer addSublayer:self.drawLayer];
self.currentFrame = 0;
@@ -139,4 +152,39 @@
}];
}
#pragma mark - Dynamic Object
- (void)setImage:(UIImage *)image forKey:(NSString *)aKey referenceLayer:(CALayer *)referenceLayer {
if (image == nil) {
return;
}
NSMutableDictionary *mutableDynamicObjects = [self.dynamicObjects mutableCopy];
[mutableDynamicObjects setObject:image forKey:aKey];
self.dynamicObjects = mutableDynamicObjects;
if (referenceLayer != nil) {
NSMutableDictionary *mutableDynamicLayers = [self.dynamicLayers mutableCopy];
[mutableDynamicLayers setObject:referenceLayer forKey:aKey];
self.dynamicLayers = mutableDynamicLayers;
}
}
- (void)clearDynamicObjects {
self.dynamicObjects = nil;
self.dynamicLayers = nil;
}
- (NSDictionary *)dynamicObjects {
if (_dynamicObjects == nil) {
_dynamicObjects = @{};
}
return _dynamicObjects;
}
- (NSDictionary *)dynamicLayers {
if (_dynamicLayers == nil) {
_dynamicLayers = @{};
}
return _dynamicLayers;
}
@end