版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.03.28 |
前言
iOS圈內(nèi)有幾個人大家基本都知道,比如說王巍、唐巧,還有YYKit框架的作者現(xiàn)任職于滴滴的郭曜源 - ibireme等。這里有一篇唐巧對他的專訪,還有他的 GitHub - Yaoyuan 和 博客,這里貼出來框架YYKit 框架。接下來幾篇我們就一起來看一下這個框架。感興趣的可以看上面寫的幾篇。
1. YYKit源碼探究(一) —— 基本概覽
2. YYKit源碼探究(二) —— NSString分類之Hash(一)
3. YYKit源碼探究(三) —— NSString分類之Encode and decode(二)
4. YYKit源碼探究(四) —— NSString分類之Drawing(三)
5. YYKit源碼探究(五) —— NSString分類之Regular Expression(四)
6. YYKit源碼探究(六) —— NSString分類之NSNumber Compatible(五)
7. YYKit源碼探究(七) —— NSString分類之Utilities(六)
8. YYKit源碼探究(八) —— NSNumber分類(一)
9. YYKit源碼探究(九) —— UIFont分類之架構(gòu)分析和Font Traits(一)
10. YYKit源碼探究(十) —— UIFont分類之Create font(二)
11. YYKit源碼探究(十一) —— UIFont分類之Load and unload font(三)
12. YYKit源碼探究(十二) —— UIFont分類之Dump font data(四)
13. YYKit源碼探究(十三) —— UIImage分類之框架結(jié)構(gòu)和Create image部分(一)
14. YYKit源碼探究(十四) —— UIImage分類之Image Info(二)
15. YYKit源碼探究(十五) —— UIImage分類之Modify Image(三)
16. YYKit源碼探究(十六) —— UIImage分類之Image Effect(四)
17. YYKit源碼探究(十七) —— UIImageView分類之架構(gòu)和image部分(一)
18. YYKit源碼探究(十八) —— UIImageView分類之highlight image部分(二)
19. YYKit源碼探究(十九) —— UIScreen分類(一)
20. YYKit源碼探究(二十) —— UIScrollView分類(一)
21. YYKit源碼探究(二十一) —— UITableView分類(一)
22. YYKit源碼探究(二十二) —— UITextField分類(一)
23. YYKit源碼探究(二十三) —— UIView分類(一)
回顧
上一篇主要介紹了UIView分類,這一篇主要看一下UIPasteboard部分。
API
下面我們看一下API。
@property (nullable, nonatomic, copy) NSData *PNGData; ///< PNG file data
@property (nullable, nonatomic, copy) NSData *JPEGData; ///< JPEG file data
@property (nullable, nonatomic, copy) NSData *GIFData; ///< GIF file data
@property (nullable, nonatomic, copy) NSData *WEBPData; ///< WebP file data
@property (nullable, nonatomic, copy) NSData *imageData; ///< image file data
/// Attributed string,
/// Set this attributed will also set the string property which is copy from the attributed string.
/// If the attributed string contains one or more image, it will also set the `images` property.
@property (nullable, nonatomic, copy) NSAttributedString *attributedString;
下面看一下詳細(xì)的API
1. @property (nullable, nonatomic, copy) NSData *PNGData;
該屬性就是獲取PNG文件數(shù)據(jù)。
方法實現(xiàn)
- (NSData *)PNGData {
return [self dataForPasteboardType:(id)kUTTypePNG];
}
- (void)setPNGData:(NSData *)PNGData {
[self setData:PNGData forPasteboardType:(id)kUTTypePNG];
}
2. @property (nullable, nonatomic, copy) NSData *JPEGData;
該屬性就是獲取JPEG文件數(shù)據(jù)。
方法實現(xiàn)
- (NSData *)JPEGData {
return [self dataForPasteboardType:(id)kUTTypeJPEG];
}
- (void)setJPEGData:(NSData *)JPEGData {
[self setData:JPEGData forPasteboardType:(id)kUTTypeJPEG];
}
3. @property (nullable, nonatomic, copy) NSData *GIFData;
該屬性就是獲取GIF文件數(shù)據(jù)。
方法實現(xiàn)
- (NSData *)GIFData {
return [self dataForPasteboardType:(id)kUTTypeGIF];
}
- (void)setGIFData:(NSData *)GIFData {
[self setData:GIFData forPasteboardType:(id)kUTTypeGIF];
}
4. @property (nullable, nonatomic, copy) NSData *WEBPData;
該屬性就是獲取WEBP文件數(shù)據(jù)。
方法實現(xiàn)
- (NSData *)WEBPData {
return [self dataForPasteboardType:YYUTTypeWEBP];
}
- (void)setWEBPData:(NSData *)WEBPData {
[self setData:WEBPData forPasteboardType:YYUTTypeWEBP];
}
5. @property (nullable, nonatomic, copy) NSData *imageData
該屬性就是獲取圖像文件數(shù)據(jù)。
方法實現(xiàn)
- (NSData *)imageData {
return [self dataForPasteboardType:(id)kUTTypeImage];
}
- (void)setImageData:(NSData *)imageData {
[self setData:imageData forPasteboardType:(id)kUTTypeImage];
}
6. @property (nullable, nonatomic, copy) NSAttributedString *attributedString;
設(shè)置此屬性還將設(shè)置屬性字符串中的字符串屬性。如果屬性字符串包含一個或多個圖像,它也會設(shè)置images屬性。
方法實現(xiàn)
- (NSAttributedString *)attributedString {
for (NSDictionary *items in self.items) {
NSData *data = items[YYPasteboardTypeAttributedString];
if (data) {
return [NSAttributedString unarchiveFromData:data];
}
}
return nil;
}
NSString *const YYPasteboardTypeAttributedString = @"com.ibireme.NSAttributedString"
+ (instancetype)unarchiveFromData:(NSData *)data {
NSAttributedString *one = nil;
@try {
one = [YYTextUnarchiver unarchiveObjectWithData:data];
}
@catch (NSException *exception) {
NSLog(@"%@",exception);
}
return one;
}
- (void)setAttributedString:(NSAttributedString *)attributedString {
self.string = [attributedString plainTextForRange:NSMakeRange(0, attributedString.length)];
NSData *data = [attributedString archiveToData];
if (data) {
NSDictionary *item = @{YYPasteboardTypeAttributedString : data};
[self addItems:@[item]];
}
[attributedString enumerateAttribute:YYTextAttachmentAttributeName inRange:NSMakeRange(0, attributedString.length) options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(YYTextAttachment *attachment, NSRange range, BOOL *stop) {
UIImage *img = attachment.content;
if ([img isKindOfClass:[UIImage class]]) {
NSDictionary *item = @{@"com.apple.uikit.image" : img};
[self addItems:@[item]];
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)YYUTTypeWEBP : ((YYImage *)img).animatedImageData};
[self addItems:@[item]];
}
}
// 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]];
}
// save animated image
if ([attachment.content isKindOfClass:[UIImageView class]]) {
UIImageView *imageView = attachment.content;
YYImage *image = (id)imageView.image;
if ([image isKindOfClass:[YYImage class]]) {
NSData *data = image.animatedImageData;
YYImageType type = image.animatedImageType;
if (data) {
switch (type) {
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)YYUTTypeWEBP : data};
[self addItems:@[item]];
} break;
default: break;
}
}
}
}
}
}];
}
后記
本篇主要講述了UIPasteboard的分類,感興趣的可以給個關(guān)注和贊,謝謝~~~~
