设置在不同网络状况下的不同图片的分类

如果需求里需要分清楚在wifi环境还是3G/4G网络状况下的图片加载的话,可以采用这个分类方法,快速加载自己想用的图片

需要的框架

1.SDWebImage

2.AFNetWorking

.h文件

(由于不能打小括号所以就看一下要导入的框架即可)

#import UIKIT

#import UIImageView+WebCache.h

@interface UIImageView (Download)

/**

设置在不同网络状况下的不同图片

注意:测试网络环境的代码一定要在一进入程序的位置AppDelegate那里进行加载

//开始监控网络状况 -- 一开始就调用去检测网络状况

[[AFNetworkReachabilityManager sharedManager]startMonitoring];

@param originImageURL    WIFI网络下用大图

@param thumbnailImageURL 3G/4G网络下用缩略图

@param placeholder      占位图片

@param completeBlock    设置成功后的回调

*/

-(void)xmg_setOriginImage:(NSString *)originImageURL thumbnailImage:(NSString *)thumbnailImageURL placeholder:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completeBlock;

@end


.m文件

import AFNetworkReachabilityManager.h

@implementation UIImageView (Download)

-(void)xmg_setOriginImage:(NSString *)originImageURL thumbnailImage:(NSString *)thumbnailImageURL placeholder:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completeBlock

{

//根据网络状况来加载图片

AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

#warning imageFromDiskCacheForKey只取不下载,sd_setImageWithURL先下载,又取

//从沙盒中查看是否有大图 - 这个方法做的不错,他会先去内存中查看有没有指定图片,然后再做策略(SDWebImage的图片缓存是用图片的url字符串作为key)

//url字符串 -> 对应一个uiimage ->即获取原图

UIImage *originalImage = [[SDImageCache sharedImageCache]imageFromDiskCacheForKey:originImageURL];

if (originalImage) {//原图已经被下载过

self.image = originalImage;

//要传递一个block进去

completeBlock(originalImage,nil,0,[NSURL URLWithString:originImageURL]);

}else{//原图没有被下载过

if (mgr.isReachableViaWiFi) {//wifi加载

[self sd_setImageWithURL:[NSURL URLWithString:originImageURL]placeholderImage:placeholder completed:completeBlock];

}else if(mgr.isReachableViaWWAN){//手机自带的网络加载

//如果添加需求,3G/4G网络也下载大图打勾的话,在这里做进一步判断,if(3g\4g网络也下载大图){xxxx//下载大图代码}

#warning downloadOriginImageWhen3GOR4G的值需要从沙盒里去获取

//定义3G/4G网络下是否要下载原图

BOOL downloadOriginImageWhen3Gor4G = YES;

if (downloadOriginImageWhen3Gor4G) {

[self sd_setImageWithURL:[NSURL URLWithString:originImageURL]placeholderImage:placeholder completed:completeBlock];

}else{

[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL]placeholderImage:placeholder completed:completeBlock];

}

}else{//没有可用网络

UIImage *thumbnailImage = [[SDImageCache sharedImageCache]imageFromDiskCacheForKey:thumbnailImageURL];

if (thumbnailImage) {//缩略图已经被下载过

self.image = thumbnailImage;

//要传递一个block进去

completeBlock(thumbnailImage,nil,0,[NSURL URLWithString:thumbnailImageURL]);

}else{//没有下载过任何图片

//占位图片 由于没有所以nil

self.image = placeholder;

}

}

}

}

@end


如何调用?

//根据网络状况来加载图片 占位图imageBackground -- 如果要下载完毕之后,让占位图片隐藏这个过程的话,需要在后面加一句block,让placeholder隐藏起来

[self.imageView xmg_setOriginImage:topic.image1 thumbnailImage:topic.image0 placeholder:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

//如果image没有值,没有必要做事了

if (!image) return ;

//让占位图片隐藏

self.placeHolderImage.hidden = YES;

//处理超长图片 -- 用上下文处理,来处理经过裁剪之后的不和谐

if (topic.isBigPicture) {

//获取需要裁剪的图片宽高

CGFloat imageW = topic.middleFrame.size.width;

CGFloat imageH = imageW * topic.height / topic.width;

CGSize size = CGSizeMake(imageW,imageH);

//开启上下文

UIGraphicsBeginImageContext(size);

//绘制图片到上下文中 -> 用这个方法,框有多大就画在框里

[self.imageView.image drawInRect:CGRectMake(0, 0, imageW, imageH)];

//获得当前上下文的image,然后当前imageview替换之

self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();

//关闭上下文

UIGraphicsEndImageContext();

}

}];


按钮控制注意

//控制按钮子控件对齐,不是用contentMode,是用以下两个属性

//UIButton *btn;

 btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;

//这个分别是设置按钮的内部子控件之间的边距,文字内边距和图片内边距,xib设置这些参数的话,在尺子图标里(xcode8)

btn.contentEdgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);

btn.titleEdgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);

btn.imageEdgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容