# iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传至服务器

iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传至服务器

做APP基本上都是需要从系统的相册当中获取一张或多张图片。那怎么做呢?下面我就带你来实现这个内容,第一次写。 我只是记录一下。如有写错,还请各位大神指点一二 ;
  1. 想要使用类似微信的相册功能,就必须导入框架 TZImagePickerController 。(星星特别多哈。。。。)
  2. https://github.com 网站 搜索 TZImagePickerController 进行下载。 也可以使用cocoa pods进行下载。 如果你没有安装cocoa pods那我就推荐http://blog.csdn.net/jhy835239104/article/details/52655122 这篇文章,个人觉得还是很不错的。需要的朋友可以参考;
好啦,废话不多说;直接上代码;

1.

##
在控制器当中添加一个UIView 和 collectionView.collectionView用来显示图片(看你需要,那就怎么添加)
-(void)choosePickViewController{

    //创建view,添加到系统的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];


    //我需要点击创下面的Btn按钮来跳转相册
    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];



    //创建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 ];


}

2.
注意 ,,,想要访问相册必须要到项目的info.plist 中添加访问权限,
* 这里写图片描述 *

  1. 在监听按钮的点击的方法中
首先需要导入框架头文件
#import <TZImagePickerController/TZImagePickerController.h>
//参数介绍: MaxImagesCount: 最多选择多少张图片  columnNumber :最少选择几张
 delegate:设置代理并遵守协议 《 TZImagePickerControllerDelegate》
 -(void)choosePhoto {
 TZImagePickerController *imagePick = [[TZImagePickerController alloc]initWithMaxImagesCount:9 columnNumber:0 delegate:self pushPhotoPickerVc:YES];

 //在这个回调函数中获得图片  和   图片的名称 但是个人不推荐在这里拿。下面还是可以拿的到的。因为这里有肯能拿不到图片,
    [imagePick setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photo, NSArray *asset, BOOL isSelectOriginalPhoto) {

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

    //弹出相册
    [self presentViewController:imagePick animated:YES completion:nil];

}
//当相片选取完成之后回来到这个函数
//完成后获取图片
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto {

    //self.photoArr 保存图片的数组
    // self.asseTArr 保存图片名称的数组

    self.photoArr = photos;

  //在此强调一声,我们的图片上传流程是先把图片上传至服务器,然后服务器返回给我一个url,我再把这个url当成图片的参数上传只服务器,这样才能识别;   所以不知道大家的流程是什么样的,我就把我的流程写出来;  

  // 首先获取服务器返回的url。就在下面写出来了
    [self getImageUrl];

    //刷新collection,显示图片
    [self.collection reloadData];

}


#pragma  mark  ========   获取服务器返回的url  ========
-(void)getImageUrl {


    [self.ImageURLArr removeAllObjects];

    //遍历保存图片的数组;
    for (UIImage *image in self.photoArr) {

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

            //将图片装换成二进制数据。看你的图片是什么格式,苹果一般都是JPEG.   下面的image就是遍历出来的图片,后面的参数是缩放图片的比例,如果你的图片过大,服务器是不接收的;
            NSData *data = UIImageJPEGRepresentation(image, 0.5);
         /*参数介绍: 
         FileData: 二进制图片 
         name: 图片可以什么名称上传
         fileName: 服务器用什么名称的文件接收
         mimeType:图片的类型,无非两种,jpeg 和 png 也可百度查查
         */
            [formData appendPartWithFileData:data name:@"pic" fileName:@"123.JPEG" mimeType:@"image/jpeg"];



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

      //当发送成功之后就返回图片的url,解析获取;转模型
        _shopModel = [YMTShopModelURL mj_objectWithKeyValues:responseObject];

         //这是保存服务器返回图片url 的数组;
        [self.ImageURLArr addObject:_shopModel.url];

    //最后在刷新collectionView。图片就会显示上去  

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

2.上传就差不多了;有什么疑问可以留言,我能解决的会尽量帮;demo暂时没有; 我的这个其实挺简单;只是自己看框架的时候看的头都疼了,里面的方法多不说,还需要上传视屏和音频;  后期有时间也会去研究并写出来;写的不好请指教;



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值