做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)限,
- 這里寫圖片描述

首先需要導(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)指教;