iOS 實現獲取遠端的圖片並顯示
好久沒寫了,新實現了遠端獲取圖片,磕磕絆絆還是完成了,現在分享一下,希望能幫到大家!我的需求⬆️從一個介面獲取到圖片的名稱並將其分別拼接到路徑上,並取出來。
(1)首先你要定義一個函式,用來獲取URL上的圖片的路徑,並進行一些處理
.h檔案
#import <Foundation/Foundation.h>
//請求成功的Block
typedef void(^HttpRequestSuccessBlock)(NSArray *responseData);
//請求成功的Block
typedef void(^HtmlRequestSuccessBlock)();
//請求失敗的Block
typedef void(^HttpRequestFailedBlock)(NSError *error, NSString *msg);
@interface GetPictureTool : NSObject
+(void)GetPictureWithScenicId:(NSString*) scenicid success:(HttpRequestSuccessBlock)success failure:(HttpRequestFailedBlock)failure;
@end
.m檔案
#import "GetPictureTool.h"
#import "NetworkManager.h"//框架,自己引用
#import "GlobalHeader.h"
#import <ImageIO/ImageIO.h>
@implementation GetPictureTool
+(void)GetPictureWithScenicId:(NSString*) scenicid success:(HttpRequestSuccessBlock)success failure:(HttpRequestFailedBlock)failure{
NSDictionary * postParameterDic = @{@"ScenicId" : scenicid};
//static NSArray * images;
NSMutableArray *images=[[NSMutableArray alloc]init];
static NSArray *imagesPath;
NSString *[email protected]"http://.....";//獲取圖片名稱的介面
NSString *[email protected]"http://.......";//圖片的下載地址
[[NetworkManager sharedManager]getWithURLString:urlStr parameterDictionary:postParameterDic successHandler:^(NSURLSessionDataTask *operation, id responseObject) {
if (responseObject) {
NSError *jsonError;
id jsonData = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:&jsonError];
NSString *result=[jsonData objectForKey:@"picpath"];
if (result!=nil) {
NSString *cccc = [result substringToIndex:[result length] - 1];
imagesPath= [cccc componentsSeparatedByString:@";"];
NSLog(@"array:%@",imagesPath);
for(NSDictionary *d in imagesPath){
NSString * imageURL =[NSString new];
imageURL= [NSString stringWithFormat:@"%@%@", imageUrl, d ];
[images addObject:imageURL];
}
if (success) {
success(images);
}
}else {
//沒有資料
}
}else {
// 獲取伺服器資料失敗
}
} failedHandler:^(NSURLSessionDataTask *operation, NSError *error) {
} expireIn:0];
}
@end
(2)呼叫這個函式
[GetPictureTool GetPictureWithScenicId:scenicid success:^(NSArray *responseData){
if (responseData) {
for (NSString *temp in responseData) {
UIImage *im=[UIImage new];
im=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: temp]]];
[ImageArray addObject:im];
}
carousel.images=[ImageArray copy];
NSLog(@"zaizheli");
}
}failure:^(NSError *error, NSString *msg) {
}];
解釋幾點:
a.for迴圈將幾個路徑都取出來,然後給UIImage物件,在使用dataWithContentsOfURL時,記得將字串轉換成URL
b.carousel.images=[ImageArray copy];這裡是將一個NSMutableArray複製給NSArray,所以用copy,不可以直接賦值