iOS 相冊(cè)圖片多選以及類似微信獲取相冊(cè)圖片并使用AFN框架上傳至服務(wù)器

做APP基本上都是需要從系統(tǒng)的相冊(cè)當(dāng)中獲取一張或多張圖片。那怎么做呢?下面我就帶你來實(shí)現(xiàn)這個(gè)內(nèi)容,第一次寫。 我只是記錄一下。如有寫錯(cuò),還請(qǐng)各位大神指點(diǎn)一二 ;

想要使用類似微信的相冊(cè)功能,就必須導(dǎo)入框架 TZImagePickerController 。(星星特別多哈。。。。)
https://github.com 網(wǎng)站 搜索 TZImagePickerController 進(jìn)行下載。 也可以使用cocoa pods進(jìn)行下載。 如果你沒有安裝cocoa pods那我就推薦http://blog.csdn.net/jhy835239104/article/details/52655122 這篇文章,個(gè)人覺得還是很不錯(cuò)的。需要的朋友可以參考;
好啦,廢話不多說;直接上代碼;

在控制器當(dāng)中添加一個(gè)UIView 和 collectionView.collectionView用來顯示圖片(看你需要,那就怎么添加)
-(void)choosePickViewController{

//創(chuàng)建view,添加到系統(tǒng)的view上面
UIView *btnView = [[UIView alloc]init];
btnView.frame = CGRectMake(0, self.textV.ymt_height, self.view.bounds.size.width,50);
btnView.backgroundColor = [UIColor colorWithRed:232/255.0 green:233/255.0 blue:234/255.0 alpha:1];
self.btnView = btnView;
[self.view addSubview:btnView];


//我需要點(diǎn)擊創(chuàng)下面的Btn按鈕來跳轉(zhuǎn)相冊(cè)
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:@"buyon_image"] forState:UIControlStateNormal];
btn.frame = CGRectMake(25,5, 40 , 40);
[btn addTarget:self action:@selector(choosePhoto) forControlEvents:UIControlEventTouchUpInside];

[self.btnView addSubview:btn];



//創(chuàng)建collection來裝飾
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];

CGFloat margin = 5; //間距
CGFloat itemWH = (self.view.ymt_width - 4 * margin) / 3 -margin;

layout.itemSize = CGSizeMake(itemWH, itemWH);
layout.minimumInteritemSpacing = margin;
layout.minimumLineSpacing = margin;

layout.sectionInset = UIEdgeInsetsMake(5, 10, 5, 10);

UICollectionView *collection = [[UICollectionView alloc]initWithFrame:CGRectMake(0, self.textV.ymt_height + self.btnView.ymt_height , LZQScreenW, LZQScreenH - self.textV.ymt_height - self.btnView.ymt_height) collectionViewLayout:layout
];

collection.backgroundColor = [UIColor colorWithRed:245/255.0 green:240/255.0 blue:245/255.0 alpha:1];

collection.delegate = self;
collection.dataSource = self;
collection.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
self.collection = collection;
[self.view addSubview:collection];


[self.collection registerClass:[YMTShoppingViewCell class] forCellWithReuseIdentifier:shoppingID ];

}

注意 ,,,想要訪問相冊(cè)必須要到項(xiàng)目的info.plist 中添加訪問權(quán)限,

  • 這里寫圖片描述
Snip20170115_3.png

首先需要導(dǎo)入框架頭文件

import <TZImagePickerController/TZImagePickerController.h>

//參數(shù)介紹: MaxImagesCount: 最多選擇多少張圖片 columnNumber :最少選擇幾張
delegate:設(shè)置代理并遵守協(xié)議 《 TZImagePickerControllerDelegate》

在監(jiān)聽按鈕的點(diǎn)擊的方法中

-(void)choosePhoto {
TZImagePickerController *imagePick = [[TZImagePickerController alloc]initWithMaxImagesCount:9 columnNumber:0 delegate:self pushPhotoPickerVc:YES];

在這個(gè)回調(diào)函數(shù)中獲得圖片 和 圖片的名稱 但是個(gè)人不推薦在這里拿。下面還是可以拿的到的。因?yàn)檫@里有肯能拿不到圖片,
[imagePick setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photo, NSArray *asset, BOOL isSelectOriginalPhoto) {

 NSLong(@"什么也不做");
}];

//彈出相冊(cè)
[self presentViewController:imagePick animated:YES completion:nil];

}

//當(dāng)相片選取完成之后回來到這個(gè)函數(shù)
//完成后獲取圖片
‘ - (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto {

//self.photoArr 保存圖片的數(shù)組
// self.asseTArr 保存圖片名稱的數(shù)組

self.photoArr = photos;

self.asseTArr = assets;
//在此強(qiáng)調(diào)一聲,我們的圖片上傳流程是先把圖片上傳至服務(wù)器,然后服務(wù)器返回給我一個(gè)url,我再把這個(gè)url當(dāng)成圖片的參數(shù)上傳只服務(wù)器,這樣才能識(shí)別; 所以不知道大家的流程是什么樣的,我就把我的流程寫出來;

// 首先獲取服務(wù)器返回的url。就在下面寫出來了
[self getImageUrl];

//刷新collection,顯示圖片
[self.collection reloadData];

}

pragma mark ======== 獲取服務(wù)器返回的url ========

-(void)getImageUrl {

[self.ImageURLArr removeAllObjects];

//遍歷保存圖片的數(shù)組;
for (UIImage *image in self.photoArr) {

//使用AFN的post請(qǐng)求   
 [self.manager POST:@"http://baidu.lllll/App/upload.php" parameters:nil
                constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

        //將圖片裝換成二進(jìn)制數(shù)據(jù)??茨愕膱D片是什么格式,蘋果一般都是JPEG.   下面的image就是遍歷出來的圖片,后面的參數(shù)是縮放圖片的比例,如果你的圖片過大,服務(wù)器是不接收的;
        NSData *data = UIImageJPEGRepresentation(image, 0.5);
     /*參數(shù)介紹: 
     FileData: 二進(jìn)制圖片 
     name: 圖片可以什么名稱上傳
     fileName: 服務(wù)器用什么名稱的文件接收
     mimeType:圖片的類型,無非兩種,jpeg 和 png 也可百度查查
     */
        [formData appendPartWithFileData:data name:@"pic" fileName:@"123.JPEG" mimeType:@"image/jpeg"];



    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

  //當(dāng)發(fā)送成功之后就返回圖片的url,解析獲??;轉(zhuǎn)模型
    _shopModel = [YMTShopModelURL mj_objectWithKeyValues:responseObject];

     //這是保存服務(wù)器返回圖片url 的數(shù)組;
    [self.ImageURLArr addObject:_shopModel.url];

//最后在刷新collectionView。圖片就會(huì)顯示上去  

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"上傳失敗------%@",error);
    }];
}

}

2.上傳就差不多了;有什么疑問可以留言,我能解決的會(huì)盡量幫;demo暫時(shí)沒有; 我的這個(gè)其實(shí)挺簡單;只是自己看框架的時(shí)候看的頭都疼了,里面的方法多不說,還需要上傳視屏和音頻; 后期有時(shí)間也會(huì)去研究并寫出來;寫的不好請(qǐng)指教;

demo地址:https://github.com/longzhenqi/LZQImagePick

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

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

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