美文网首页获取系统相册-视频iOS学习坚持写
iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传

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

作者: 龙龙_龙 | 来源:发表于2017-01-15 17:24 被阅读342次

    做APP基本上都是需要从系统的相册当中获取一张或多张图片。那怎么做呢?下面我就带你来实现这个内容,第一次写。 我只是记录一下。如有写错,还请各位大神指点一二 ;

    想要使用类似微信的相册功能,就必须导入框架 TZImagePickerController 。(星星特别多哈。。。。)
    https://github.com 网站 搜索 TZImagePickerController 进行下载。 也可以使用cocoa pods进行下载。 如果你没有安装cocoa pods那我就推荐http://blog.csdn.net/jhy835239104/article/details/52655122 这篇文章,个人觉得还是很不错的。需要的朋友可以参考;
    好啦,废话不多说;直接上代码;

    在控制器当中添加一个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 ];
    

    }

    注意 ,,,想要访问相册必须要到项目的info.plist 中添加访问权限,

    • 这里写图片描述
    Snip20170115_3.png

    首先需要导入框架头文件

    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;
    

    self.asseTArr = assets;
    //在此强调一声,我们的图片上传流程是先把图片上传至服务器,然后服务器返回给我一个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暂时没有; 我的这个其实挺简单;只是自己看框架的时候看的头都疼了,里面的方法多不说,还需要上传视屏和音频; 后期有时间也会去研究并写出来;写的不好请指教;

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

    相关文章

      网友评论

      本文标题:iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传

      本文链接:https://www.haomeiwen.com/subject/httubttx.html