123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- //
- // UIPasteboard+YYText.m
- // YYText <https://github.com/ibireme/YYText>
- //
- // Created by ibireme on 15/4/2.
- // Copyright (c) 2015 ibireme.
- //
- // This source code is licensed under the MIT-style license found in the
- // LICENSE file in the root directory of this source tree.
- //
- #import "UIPasteboard+YYText.h"
- #import "NSAttributedString+YYText.h"
- #import <MobileCoreServices/MobileCoreServices.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
- #elif __has_include(<YYWebImage/YYImage.h>)
- #import <YYWebImage/YYImage.h>
- #define YYTextAnimatedImageAvailable 1
- #else
- #define YYTextAnimatedImageAvailable 0
- #endif
- // Dummy class for category
- @interface UIPasteboard_YYText : NSObject @end
- @implementation UIPasteboard_YYText @end
- NSString *const YYTextPasteboardTypeAttributedString = @"com.ibireme.NSAttributedString";
- NSString *const YYTextUTTypeWEBP = @"com.google.webp";
- @implementation UIPasteboard (YYText)
- - (void)setYy_PNGData:(NSData *)PNGData {
- [self setData:PNGData forPasteboardType:(id)kUTTypePNG];
- }
- - (NSData *)yy_PNGData {
- return [self dataForPasteboardType:(id)kUTTypePNG];
- }
- - (void)setYy_JPEGData:(NSData *)JPEGData {
- [self setData:JPEGData forPasteboardType:(id)kUTTypeJPEG];
- }
- - (NSData *)yy_JPEGData {
- return [self dataForPasteboardType:(id)kUTTypeJPEG];
- }
- - (void)setYy_GIFData:(NSData *)GIFData {
- [self setData:GIFData forPasteboardType:(id)kUTTypeGIF];
- }
- - (NSData *)yy_GIFData {
- return [self dataForPasteboardType:(id)kUTTypeGIF];
- }
- - (void)setYy_WEBPData:(NSData *)WEBPData {
- [self setData:WEBPData forPasteboardType:YYTextUTTypeWEBP];
- }
- - (NSData *)yy_WEBPData {
- return [self dataForPasteboardType:YYTextUTTypeWEBP];
- }
- - (void)setYy_ImageData:(NSData *)imageData {
- [self setData:imageData forPasteboardType:(id)kUTTypeImage];
- }
- - (NSData *)yy_ImageData {
- return [self dataForPasteboardType:(id)kUTTypeImage];
- }
- - (void)setYy_AttributedString:(NSAttributedString *)attributedString {
- self.string = [attributedString yy_plainTextForRange:NSMakeRange(0, attributedString.length)];
- NSData *data = [attributedString yy_archiveToData];
- if (data) {
- NSDictionary *item = @{YYTextPasteboardTypeAttributedString : data};
- [self addItems:@[item]];
- }
- [attributedString enumerateAttribute:YYTextAttachmentAttributeName inRange:NSMakeRange(0, attributedString.length) options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(YYTextAttachment *attachment, NSRange range, BOOL *stop) {
-
- // save image
- UIImage *simpleImage = nil;
- if ([attachment.content isKindOfClass:[UIImage class]]) {
- simpleImage = attachment.content;
- } else if ([attachment.content isKindOfClass:[UIImageView class]]) {
- simpleImage = ((UIImageView *)attachment.content).image;
- }
- if (simpleImage) {
- NSDictionary *item = @{@"com.apple.uikit.image" : simpleImage};
- [self addItems:@[item]];
- }
-
- #if YYTextAnimatedImageAvailable
- // save animated image
- if ([attachment.content isKindOfClass:[UIImageView class]]) {
- UIImageView *imageView = attachment.content;
- Class aniImageClass = NSClassFromString(@"YYImage");
- UIImage *image = imageView.image;
- if (aniImageClass && [image isKindOfClass:aniImageClass]) {
- NSData *data = [image valueForKey:@"animatedImageData"];
- NSNumber *type = [image valueForKey:@"animatedImageType"];
- if (data) {
- switch (type.unsignedIntegerValue) {
- case YYImageTypeGIF: {
- NSDictionary *item = @{(id)kUTTypeGIF : data};
- [self addItems:@[item]];
- } break;
- case YYImageTypePNG: { // APNG
- NSDictionary *item = @{(id)kUTTypePNG : data};
- [self addItems:@[item]];
- } break;
- case YYImageTypeWebP: {
- NSDictionary *item = @{(id)YYTextUTTypeWEBP : data};
- [self addItems:@[item]];
- } break;
- default: break;
- }
- }
- }
- }
- #endif
-
- }];
- }
- - (NSAttributedString *)yy_AttributedString {
- for (NSDictionary *items in self.items) {
- NSData *data = items[YYTextPasteboardTypeAttributedString];
- if (data) {
- return [NSAttributedString yy_unarchiveFromData:data];
- }
- }
- return nil;
- }
- @end
|