ibireme 9 年之前
父节点
当前提交
5cd1e11825
共有 2 个文件被更改,包括 32 次插入35 次删除
  1. 10 25
      YYText/Utility/NSAttributedString+YYText.m
  2. 22 10
      YYText/Utility/UIPasteboard+YYText.m

+ 10 - 25
YYText/Utility/NSAttributedString+YYText.m

@@ -16,16 +16,6 @@
 #import "YYTextUtilities.h"
 #import "YYTextUtilities.h"
 #import <CoreFoundation/CoreFoundation.h>
 #import <CoreFoundation/CoreFoundation.h>
 
 
-#if __has_include("YYImage.h")
-#import "YYImage.h"
-#define YYTextAnimatedImageAvailable 1
-#elif __has_include(<YYImage/YYImage.h>)
-#import <YYImage/YYImage.h>
-#define YYTextAnimatedImageAvailable 1
-#else
-#define YYTextAnimatedImageAvailable 0
-#endif
-
 
 
 // Dummy class for category
 // Dummy class for category
 @interface NSAttributedString_YYText : NSObject @end
 @interface NSAttributedString_YYText : NSObject @end
@@ -634,13 +624,14 @@ return style. _attr_;
     BOOL hasAnim = NO;
     BOOL hasAnim = NO;
     if (image.images.count > 1) {
     if (image.images.count > 1) {
         hasAnim = YES;
         hasAnim = YES;
+    } else if (NSProtocolFromString(@"YYAnimatedImage") &&
+               [image conformsToProtocol:NSProtocolFromString(@"YYAnimatedImage")]) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wundeclared-selector"
+        NSNumber *frameCount = [image performSelector:@selector(animatedImageFrameCountttt)];
+#pragma clang diagnostic pop
+        if (frameCount.intValue > 1) hasAnim = YES;
     }
     }
-#if YYTextAnimatedImageAvailable
-    else if ([image conformsToProtocol:@protocol(YYAnimatedImage)]) {
-        id <YYAnimatedImage> ani = (id)image;
-        if (ani.animatedImageFrameCount > 1) hasAnim = YES;
-    }
-#endif
     
     
     CGFloat ascent = YYEmojiGetAscentWithFontSize(fontSize);
     CGFloat ascent = YYEmojiGetAscentWithFontSize(fontSize);
     CGFloat descent = YYEmojiGetDescentWithFontSize(fontSize);
     CGFloat descent = YYEmojiGetDescentWithFontSize(fontSize);
@@ -655,19 +646,13 @@ return style. _attr_;
     attachment.contentMode = UIViewContentModeScaleAspectFit;
     attachment.contentMode = UIViewContentModeScaleAspectFit;
     attachment.contentInsets = UIEdgeInsetsMake(ascent - (bounding.size.height + bounding.origin.y), bounding.origin.x, descent + bounding.origin.y, bounding.origin.x);
     attachment.contentInsets = UIEdgeInsetsMake(ascent - (bounding.size.height + bounding.origin.y), bounding.origin.x, descent + bounding.origin.y, bounding.origin.x);
     if (hasAnim) {
     if (hasAnim) {
-#if YYTextAnimatedImageAvailable
-        YYAnimatedImageView *view = [YYAnimatedImageView new];
+        Class imageClass = NSClassFromString(@"YYAnimatedImageView");
+        if (!imageClass) imageClass = [UIImageView class];
+        UIImageView *view = (id)[imageClass new];
         view.frame = bounding;
         view.frame = bounding;
         view.image = image;
         view.image = image;
         view.contentMode = UIViewContentModeScaleAspectFit;
         view.contentMode = UIViewContentModeScaleAspectFit;
         attachment.content = view;
         attachment.content = view;
-#else
-        UIImageView *view = [UIImageView new];
-        view.frame = bounding;
-        view.image = image;
-        view.contentMode = UIViewContentModeScaleAspectFit;
-        attachment.content = view;
-#endif
     } else {
     } else {
         attachment.content = image;
         attachment.content = image;
     }
     }

+ 22 - 10
YYText/Utility/UIPasteboard+YYText.m

@@ -20,6 +20,9 @@
 #elif __has_include(<YYImage/YYImage.h>)
 #elif __has_include(<YYImage/YYImage.h>)
 #import <YYImage/YYImage.h>
 #import <YYImage/YYImage.h>
 #define YYTextAnimatedImageAvailable 1
 #define YYTextAnimatedImageAvailable 1
+#elif __has_include(<YYWebImage/YYImage.h>)
+#import <YYWebImage/YYImage.h>
+#define YYTextAnimatedImageAvailable 1
 #else
 #else
 #define YYTextAnimatedImageAvailable 0
 #define YYTextAnimatedImageAvailable 0
 #endif
 #endif
@@ -90,19 +93,28 @@ NSString *const YYTextUTTypeWEBP = @"com.google.webp";
             [self addItems:@[item]];
             [self addItems:@[item]];
             
             
 #if YYTextAnimatedImageAvailable
 #if YYTextAnimatedImageAvailable
-            if ([img isKindOfClass:[YYImage class]] && ((YYImage *)img).animatedImageData) {
-                if (((YYImage *)img).animatedImageType == YYImageTypeGIF) {
-                    NSDictionary *item = @{(id)kUTTypeGIF : ((YYImage *)img).animatedImageData};
-                    [self addItems:@[item]];
-                } else if (((YYImage *)img).animatedImageType == YYImageTypePNG) {
-                    NSDictionary *item = @{(id)kUTTypePNG : ((YYImage *)img).animatedImageData};
-                    [self addItems:@[item]];
-                } else if (((YYImage *)img).animatedImageType == YYImageTypeWebP) {
-                    NSDictionary *item = @{(id)YYTextUTTypeWEBP : ((YYImage *)img).animatedImageData};
-                    [self addItems:@[item]];
+            Class cls = NSClassFromString(@"YYImage");
+            if (cls && [img isKindOfClass:cls]) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wundeclared-selector"
+                NSData *data = [img performSelector:@selector(animatedImageData)];
+                NSNumber *type = [img performSelector:@selector(animatedImageType)];
+#pragma clang diagnostic pop
+                if (data) {
+                    if (type.unsignedIntegerValue == YYImageTypeGIF) {
+                        NSDictionary *item = @{(id)kUTTypeGIF : data};
+                        [self addItems:@[item]];
+                    } else if (type.unsignedIntegerValue == YYImageTypePNG) {
+                        NSDictionary *item = @{(id)kUTTypePNG : data};
+                        [self addItems:@[item]];
+                    } else if (type.unsignedIntegerValue == YYImageTypeWebP) {
+                        NSDictionary *item = @{(id)YYTextUTTypeWEBP : data};
+                        [self addItems:@[item]];
+                    }
                 }
                 }
             }
             }
 #endif
 #endif
+            
         }
         }
     }];
     }];
 }
 }