美文网首页
设置在不同网络状况下的不同图片的分类

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

作者: 一米押金 | 来源:发表于2016-12-14 11:42 被阅读0次

如果需求里需要分清楚在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);

相关文章

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

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

  • PhotoZoom Pro 7怎么进行参数设置

    每个用户在使用PhotoZoom时,在针对不同的图片,我们处理的方式也不同。所以在参数设置会因图片不同而不同。那么...

  • 在不同网络状态下加载图片

    程序加载图片会遇到很多情况,比如有网和没网,有网状态下又会分WWAN和WIFI两种情况等等,现在接触到一段有关程序...

  • 颜色转图片

    UIButton里有对不同状态设置不同背景图片的方法,但没有不同状态对应不同背景色的方法在不需要切图的情况下,我们...

  • 2019-11-14 iOS 网络层优化

    1、区分不同网络情况下的超时设置 连接超时:在2/3/4G网络下,设置5-10秒。WIFI情况下设置5秒 2、减少...

  • 嵌入内容

    1、图片img元素 srcset 可以在不同的窗口下提供不同的src 也就是展示不同的图片sizes 在不同的显示...

  • 简书编辑的小技巧

    1、不同字体在 设置->基础设置->富文本 模式下可以实现2、添加图片,让文章更生动 3、添加代码框 用```放到...

  • 零基础学绘画|禅绕图样——Paradox(悖论)及其变体

    写在前面:本文是一篇超详细的绘图教程,图片较多。根据网络状况的不同,打开的快慢会有所不同,请见谅! 在学习禅绕画的...

  • HTML 类

    对HTML进行分类(设置类),使我们能够为元素的类定义CSS样式。对相同的类设置相同的样式,或者为不同的类设置不同...

  • 奇亿音乐分享:游戏音乐分类

    游戏音乐风格多种多样,不同风格的音乐在游戏中都有不同的表现,游戏音乐有着不同的分类,比如按照声部状况也分为:单声部...

网友评论

      本文标题:设置在不同网络状况下的不同图片的分类

      本文链接:https://www.haomeiwen.com/subject/exsimttx.html