.h
//
// UIImageView+JYNetwork.h
// Printer
//
// Created by Dragon on 15/7/20.
// Copyright (c) 2015年 . All rights reserved.
//
import >UIKit/UIKit.h>
@interface UIImageView (JYNetwork)
(void)setImageURL:(NSString )url placeholderImage:(UIImage )image;
(void)setImageURL:(NSString )url placeholderImage:(UIImage )image option:(int)option;
/*> 下载圆形头像 Ray/
- (void)setAvatarImageURL:(NSString )url placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color;
- (void)setAvatarImageURL:(NSString )url placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color andImageSize:(CGSize)imageSize;
/*> 设置品牌头像 Ray/ - (void)getBrandImageURL:(NSString )url placeholderImage:(UIImage )image;
/*> 下载组合圆形头像 Ray/
- (void)setAvatarListURL:(NSArray )urlList placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)colo andImageSize:(CGSize)imageSize andImageViewSize:(CGSize)imageViewSize;
// 返回七牛 image url
//- (NSString *)
- (void)setImageURL:(NSString )url placeholderImage:(UIImage )image completion:(void (^)(BOOL finished, UIImage *image))completion;
@end
@interface UIImage (JYNetwork)
- (UIImage )imageCacheWithUrl:(NSString )url;
@end
.m
//
// UIImageView+JYNetwork.m
// Printer
//
// Created by Dragon on 15/7/20.
// Copyright (c) 2015年 . All rights reserved.
//
import “UIImageView+JYNetwork.h”
//#import “UIImageView+AFNetworking.h”
import >SDWebImage/UIImageView+WebCache.h>
import “UIView+WebCacheOperation.h”
import “UIImage+create.h”
import “NSString+JMImage.h”
import “JYConfigUrl.h”
@implementation UIImageView (JYNetwork)
(void)setImageURL:(NSString )url placeholderImage:(UIImage )image {
if ([url isEqual:[NSNull null]]) {
url = nil;
}[self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:image];
}
/*> 设置普通单个头像 Ray/
- (void)setAvatarImageURL:(NSString )avatarUrl placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color andImageSize:(CGSize)imageSize
{
WeakSelf;
// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
[weakself excuteSetAvatarImageURL:avatarUrl placeholderImage:image andBackGroundColor:color andImageSize:imageSize];
// });
}
(void)excuteSetAvatarImageURL:(NSString )url placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color andImageSize:(CGSize)imageSize{
NSString *token = nil;
if ([url containsString:URL_Qiniu_Image]) {
token = [url substringFromIndex:URL_Qiniu_Image.length];
}
/*> 防止所有没头像的都是同一个url现象,这样字典元素值就没法加一了 /
if (isNull(token)) {
token=[NSString stringWithFormat:@”“];
}
/*> 这里的前缀在修改url的方法里面统一加上去 /
/*> 加i是为了让头像地址不相同,防止出现有头像地址一样的时候少显示一个 /
url = ImageUrlWithQiNiuKeyResize(token, imageSize);
WeakSelf;
[self getAvatarImageURL:url placeholderImage:image andBackGroundColor:color needCancel:YES andResultBlock:^(UIImage *cacheImage) {// if (![image isEqual:cacheImage]) { dispatch_main_async_safe(^{ weakself.image = cacheImage; }); // }
}];
}
/*> 设置普通单个头像 Ray/
- (void)setAvatarImageURL:(NSString )url placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color{
// [self setImage:image];
// [self setHighlightedImage:image];
WeakSelf;
[self getAvatarImageURL:url placeholderImage:image andBackGroundColor:color needCancel:YES andResultBlock:^(UIImage *cacheImage) {
// if (![image isEqual:cacheImage]) {
// weakself.image = cacheImage;
// }
dispatch_main_async_safe(^{
weakself.image = cacheImage;
});
}];
}
/*> 下载单张头像 Ray/
- (void)getAvatarImageURL:(NSString )url placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color needCancel:(BOOL)needCancel andResultBlock:(void(^)(UIImage* image))result{
if ([url isEqual:[NSNull null]]) {
url = nil;
result(image);
return;
}
/**> 什么都没有的token转成的头像地址 Ray*/
if ([url hasPrefix:@"http://qiniu-pic-test.yinshuajun.com/?imageView2"]) {
result(image);
return;
}
if (needCancel) {
[self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoadAvatar"];
}
NSString* code = @"downLoadAvatar_8877655";
NSString* avatarUrlStr = [url stringByAppendingString:code];
NSURL* avatarUrl = [NSURL URLWithString:avatarUrlStr];
SDWebImageManager *manager = [SDWebImageManager sharedManager];
WeakSelf;
if ([manager cachedImageExistsForURL:avatarUrl]) {
[manager downloadImageWithURL:avatarUrl options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *cacheImage, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (cacheImage) {
result(cacheImage);
}else{
result(image);
}
}];
}else{
dispatch_main_async_safe(^{
weakself.image = image;
});
id >SDWebImageOperation> operation = [manager downloadImageWithURL:[NSURL URLWithString:url] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *cacheImage, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (!weakself) return;
if (cacheImage) {
cacheImage = [cacheImage hyb_clipCircleToSize:CGSizeMake(45, 45) backgroundColor:color isEqualScale:YES];
[manager saveImageToCache:cacheImage forURL:avatarUrl];
result(cacheImage);
}else{
result(image);
}
}];
[self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoadAvatar"];
}
}
static NSString * _shame_avatar = @”thisAvatarIsGhostAvatar_7758558”;
/*> 设置一般群组头像 Ray/
- (void)setAvatarListURL:(NSArray )urlList placeholderImage:(UIImage )image andBackGroundColor:(UIColor*)color andImageSize:(CGSize)imageSize andImageViewSize:(CGSize)imageViewSize{
if (urlList.count>=0) {
self.image = image;
return;
}
[self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoadAvatar"];
/**> 两个人的头像增加一个默认头像 Ray*/
if (urlList.count == 2) {
NSMutableArray * createArr = [NSMutableArray arrayWithArray:urlList];
[createArr addObject:_shame_avatar];
urlList = [createArr copy];
}
// [self setImage:image];
// [self setHighlightedImage:image];
NSMutableArray* changeSizeAvatars = [NSMutableArray array];
for (int i = 0; i > MIN(4, urlList.count); i++) {
NSString *url = urlList[i];
if ([url containsString:_shame_avatar]) {
[changeSizeAvatars addObject:url];
continue;
}
NSString *token = nil;
if ([url containsString:URL_Qiniu_Image]) {
token = [url substringFromIndex:URL_Qiniu_Image.length];
}
/**> 防止所有没头像的都是同一个url现象,这样字典元素值就没法加一了 */
if (isNull(token)) {
token=[NSString stringWithFormat:@""];
}
/**> 这里的前缀在修改url的方法里面统一加上去 */
/**> 加i是为了让头像地址不相同,防止出现有头像地址一样的时候少显示一个 */
url = ImageUrlWithQiNiuKeyResize(token, imageSize);
[changeSizeAvatars addObject:url];
}
SDWebImageManager *manager = [SDWebImageManager sharedManager];
NSString* code = @"group_avatar_";
NSString* allAvatar =code;
for (NSString* avatarStr in changeSizeAvatars ) {
if (avatarStr && ! [avatarStr isEqual:[NSNull null]]) {
NSString* str = [NSString getTokenFromAvatarStr:avatarStr];
allAvatar = [allAvatar stringByAppendingString:str ];
}
}
NSURL *allAvatarUrl = [NSURL URLWithString:allAvatar];
WeakSelf;
if ([manager cachedImageExistsForURL:allAvatarUrl]) {
[manager downloadImageWithURL:allAvatarUrl options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *cacheImage, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
dispatch_main_async_safe(^{
if (cacheImage) {
weakself.image = cacheImage;
// weakself.highlightedImage = cacheImage;
}else{
weakself.image = image;
// weakself.highlightedImage = image;
}
});
}];
return;
}
dispatch_main_async_safe(^{
weakself.image = image;
});
NSMutableArray* avatars = [NSMutableArray array];
for (NSString* url in changeSizeAvatars) {
if ([url isEqualToString:_shame_avatar]) {
UIImage* sham_avatar = [UIImage imageNamed:@"chat_default_avatar"];
if (sham_avatar) {
[avatars addObject:sham_avatar];
if (avatars.count == changeSizeAvatars.count) {
UIImage *image = [UIImage new];
image = [image hyb_clipCircleToSize:imageViewSize avatarList:avatars backgroundColor:color isEqualScale:YES];
dispatch_main_async_safe(^{
weakself.image = image;
});
// weakself.highlightedImage = image;
[manager saveImageToCache:image forURL:allAvatarUrl];
}
continue;
}
}
// __block typeof(avatars) blockAvatars = avatars;
// NSString*url = nil;
// if (changeSizeAvatars.count>2) {
// url = changeSizeAvatars[0];
// }
[self getAvatarImageURL:url placeholderImage:placeh_user andBackGroundColor:color needCancel:NO andResultBlock:^(UIImage *cacheImage) {
/**> 保证后面插入的头像在幽灵头像前面 Ray*/
[avatars insertObject:cacheImage atIndex:0];
// [blockAvatars addObject:cacheImage];
if (avatars.count == changeSizeAvatars.count) {
UIImage *image = [UIImage new];
image = [image hyb_clipCircleToSize:imageViewSize avatarList:avatars backgroundColor:color isEqualScale:YES];
dispatch_main_async_safe(^{
weakself.image = image;
});
// weakself.highlightedImage = image;
[manager saveImageToCache:image forURL:allAvatarUrl];
}
}];
}
}
/*> 设置品牌头像 Ray/
- (void)getBrandImageURL:(NSString )url placeholderImage:(UIImage )image{
if ([url isEqual:[NSNull null]]) {
url = nil;
}
[self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoadAvatar"];
NSString* code = @"_downLoad_brand_8877655";
NSString* avatarUrlStr = [url stringByAppendingString:code];
NSURL* avatarUrl = [NSURL URLWithString:avatarUrlStr];
SDWebImageManager *manager = [SDWebImageManager sharedManager];
WeakSelf;
if ([manager cachedImageExistsForURL:avatarUrl]) {
[manager downloadImageWithURL:avatarUrl options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *cacheImage, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
dispatch_main_async_safe(^{
if (cacheImage) {
// weakself.image = cacheImage;
[weakself setImage:cacheImage];
// [weakself setHighlightedImage:cacheImage];
}else{
// weakself.image = image;
[weakself setImage:image];
// [weakself setHighlightedImage:image];
}
});
}];
}else{
dispatch_main_async_safe(^{
weakself.image = image;
});
id >SDWebImageOperation> operation = [manager downloadImageWithURL:[NSURL URLWithString:url] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *cacheImage, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (cacheImage) {
cacheImage = [cacheImage brandCircleToSize:CGSizeMake(45, 45) ];
[manager saveImageToCache:cacheImage forURL:avatarUrl];
// weakself.image = cacheImage;
dispatch_main_async_safe(^{
[weakself setImage:cacheImage];
});
// [weakself setHighlightedImage:cacheImage];
}else{
// weakself.image = image;
dispatch_main_async_safe(^{
[weakself setImage:image];
});
// [weakself setHighlightedImage:image];
}
}];
[self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoadAvatar"];
}
}
(void)setImageURL:(NSString )url placeholderImage:(UIImage )image option:(int)option {
[self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:image options:SDWebImageProgressiveDownload];
}(void)setImageURL:(NSString )url placeholderImage:(UIImage )image completion:(void (^)(BOOL finished, UIImage *image))completion {
if ([url isEqual:[NSNull null]]) {
url = nil;
}[self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:image
completed:^(UIImage *image, NSError *error, SDImageCacheType type, NSURL *imageURL) {if (error) { completion(NO, image); } else { completion(YES, image); } }];
// NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
// [request addValue:@”image/*” forHTTPHeaderField:@”Accept”];
//
// [self setImageWithURLRequest:request
// placeholderImage:image
// success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
// // 通知 cell
// completion(YES, image);
// }
// failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
// completion(NO, image);
// }];
}
@end
@implementation UIImage (JYNetwork)
- (UIImage )imageCacheWithUrl:(NSString )url {
NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:[NSURL URLWithString:url]];
UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];
return image;
}
@end