設(shè)置在不同網(wǎng)絡(luò)狀況下的不同圖片的分類

如果需求里需要分清楚在wifi環(huán)境還是3G/4G網(wǎng)絡(luò)狀況下的圖片加載的話,可以采用這個分類方法,快速加載自己想用的圖片

需要的框架

1.SDWebImage

2.AFNetWorking

.h文件

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

#import UIKIT

#import UIImageView+WebCache.h

@interface UIImageView (Download)

/**

設(shè)置在不同網(wǎng)絡(luò)狀況下的不同圖片

注意:測試網(wǎng)絡(luò)環(huán)境的代碼一定要在一進入程序的位置AppDelegate那里進行加載

//開始監(jiān)控網(wǎng)絡(luò)狀況 -- 一開始就調(diào)用去檢測網(wǎng)絡(luò)狀況

[[AFNetworkReachabilityManager sharedManager]startMonitoring];

@param originImageURL? ? WIFI網(wǎng)絡(luò)下用大圖

@param thumbnailImageURL 3G/4G網(wǎng)絡(luò)下用縮略圖

@param placeholder? ? ? 占位圖片

@param completeBlock? ? 設(shè)置成功后的回調(diào)

*/

-(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

{

//根據(jù)網(wǎng)絡(luò)狀況來加載圖片

AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

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

//從沙盒中查看是否有大圖 - 這個方法做的不錯,他會先去內(nèi)存中查看有沒有指定圖片,然后再做策略(SDWebImage的圖片緩存是用圖片的url字符串作為key)

//url字符串 -> 對應一個uiimage ->即獲取原圖

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

if (originalImage) {//原圖已經(jīng)被下載過

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){//手機自帶的網(wǎng)絡(luò)加載

//如果添加需求,3G/4G網(wǎng)絡(luò)也下載大圖打勾的話,在這里做進一步判斷,if(3g\4g網(wǎng)絡(luò)也下載大圖){xxxx//下載大圖代碼}

#warning downloadOriginImageWhen3GOR4G的值需要從沙盒里去獲取

//定義3G/4G網(wǎng)絡(luò)下是否要下載原圖

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{//沒有可用網(wǎng)絡(luò)

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

if (thumbnailImage) {//縮略圖已經(jīng)被下載過

self.image = thumbnailImage;

//要傳遞一個block進去

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

}else{//沒有下載過任何圖片

//占位圖片 由于沒有所以nil

self.image = placeholder;

}

}

}

}

@end


如何調(diào)用?

//根據(jù)網(wǎng)絡(luò)狀況來加載圖片 占位圖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;

//處理超長圖片 -- 用上下文處理,來處理經(jīng)過裁剪之后的不和諧

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();

//關(guān)閉上下文

UIGraphicsEndImageContext();

}

}];


按鈕控制注意

//控制按鈕子控件對齊,不是用contentMode,是用以下兩個屬性

//UIButton *btn;

?btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;

//這個分別是設(shè)置按鈕的內(nèi)部子控件之間的邊距,文字內(nèi)邊距和圖片內(nèi)邊距,xib設(shè)置這些參數(shù)的話,在尺子圖標里(xcode8)

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容