From b6b9b7bfdf1c4a9e290e4b42fa440c320ba141f3 Mon Sep 17 00:00:00 2001 From: dfyb Date: Thu, 21 May 2020 13:35:42 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=9B=9E=E8=B0=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile.lock | 4 ++-- SVGAPlayer.podspec | 2 +- Source/SVGAPlayer.h | 3 +++ Source/SVGAPlayer.m | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index c78a8c2c..825cd389 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -47,7 +47,7 @@ DEPENDENCIES: - Yoga SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - Protobuf - SSZipArchive - Yoga @@ -64,4 +64,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 7f6714245d47e69d2933463289e4c4d6de65b831 -COCOAPODS: 1.7.4 +COCOAPODS: 1.8.4 diff --git a/SVGAPlayer.podspec b/SVGAPlayer.podspec index f1bd793d..d8a30ad3 100644 --- a/SVGAPlayer.podspec +++ b/SVGAPlayer.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SVGAPlayer" - s.version = "2.5.2" + s.version = "2.5.4" s.summary = "SVGAPlayer 是一个高性能的动画播放器" s.description = <<-DESC SVGA 是一个私有的动画格式,由 YY UED 主导开发。 diff --git a/Source/SVGAPlayer.h b/Source/SVGAPlayer.h index 9d22557a..3ab4f956 100644 --- a/Source/SVGAPlayer.h +++ b/Source/SVGAPlayer.h @@ -21,6 +21,8 @@ typedef void(^SVGAPlayerDynamicDrawingBlock)(CALayer *contentLayer, NSInteger frameIndex); +typedef void(^SVGAEventBlock)(SVGAPlayer *player); + @interface SVGAPlayer : UIView @property (nonatomic, weak) id delegate; @@ -44,6 +46,7 @@ typedef void(^SVGAPlayerDynamicDrawingBlock)(CALayer *contentLayer, NSInteger fr - (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)setEventBlock:(SVGAEventBlock)eventBlock forKey:(NSString *)aKey; - (void)setHidden:(BOOL)hidden forKey:(NSString *)aKey; - (void)clearDynamicObjects; diff --git a/Source/SVGAPlayer.m b/Source/SVGAPlayer.m index 92132e2f..b770a4d9 100644 --- a/Source/SVGAPlayer.m +++ b/Source/SVGAPlayer.m @@ -26,6 +26,7 @@ @interface SVGAPlayer () @property (nonatomic, copy) NSDictionary *dynamicObjects; @property (nonatomic, copy) NSDictionary *dynamicTexts; @property (nonatomic, copy) NSDictionary *dynamicDrawings; +@property (nonatomic, copy) NSDictionary *dynamicEvents; @property (nonatomic, copy) NSDictionary *dynamicHiddens; @property (nonatomic, assign) int loopCount; @property (nonatomic, assign) NSRange currentRange; @@ -389,6 +390,29 @@ - (void)setVideoItem:(SVGAVideoEntity *)videoItem { }]; } +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + UITouch *touch = touches.anyObject; + CGPoint touchPoint = [touch locationInView:touch.view]; + if (self.contentLayers.count > 0) { + for (SVGAContentLayer *layer in self.contentLayers) { + if ([layer isKindOfClass:[SVGAContentLayer class]]) { + for (NSString *key in self.dynamicEvents.allKeys) { + if ([layer.imageKey isEqualToString:key]) { + CGRect layerRect = layer.bounds; + CGPoint layerPoint = [layer convertPoint:touchPoint fromLayer:self.layer]; + SVGAEventBlock block = self.dynamicEvents[key]; + if (CGRectContainsPoint(layerRect, layerPoint)) { + if (block) { + block(self); + } + } + } + } + } + } + } +} + #pragma mark - Dynamic Object - (void)setImage:(UIImage *)image forKey:(NSString *)aKey { @@ -469,6 +493,15 @@ - (void)setDrawingBlock:(SVGAPlayerDynamicDrawingBlock)drawingBlock forKey:(NSSt } } +- (void)setEventBlock:(SVGAEventBlock)eventBlock forKey:(NSString *)aKey { + if (eventBlock == nil || aKey.length <= 0) { + return; + } + NSMutableDictionary *mutableDynamicEvents = [self.dynamicEvents mutableCopy]; + [mutableDynamicEvents setObject:eventBlock forKey:aKey]; + self.dynamicEvents = mutableDynamicEvents.copy; +} + - (void)setHidden:(BOOL)hidden forKey:(NSString *)aKey { NSMutableDictionary *mutableDynamicHiddens = [self.dynamicHiddens mutableCopy]; [mutableDynamicHiddens setObject:@(hidden) forKey:aKey]; @@ -488,6 +521,7 @@ - (void)clearDynamicObjects { self.dynamicTexts = nil; self.dynamicHiddens = nil; self.dynamicDrawings = nil; + self.dynamicEvents = nil; } - (NSDictionary *)dynamicObjects { @@ -518,4 +552,11 @@ - (NSDictionary *)dynamicHiddens { return _dynamicDrawings; } +- (NSDictionary *)dynamicEvents { + if (_dynamicEvents == nil) { + _dynamicEvents = @{}; + } + return _dynamicEvents; +} + @end