美文网首页iOS开发好文键盘上的鼓手学习封装的demo材料
iOS仿微信qq图片选择器imagePicker --只需要初始

iOS仿微信qq图片选择器imagePicker --只需要初始

作者: Assuner | 来源:发表于2016-12-23 21:18 被阅读5685次

    git请移步(带pod) https://github.com/Assuner-Lee/LPDQuoteImagesView

    最新加入了pod

    本库封装于TZImagePickerController

    pod  'LPDQuoteImagesView'

    # LPDQuoteImagesView

    (iOS-imagePicker仿qq仿微信--pickImage and quote)只需要几行简单的代码,就可以引入多选照片并引用照片的功能模块(贴上一个view,就获得了全部).  所有的功能都集成到了黑盒里,你需要做的只是初始化quoteview和取得quoteview 的已选择图片数组(支持拍照,视频)。

    这是贴上去的quoteView  (图片1红色矩形区域)

    这就是quoteView贴上去的效果(红色矩形内区域), 点击可以选择或预览照片(可设置拖拽排序),点击右上角删除(有动画),可以通过引用这个view的selectedPhotos属性得到UIImage数组,保存或上传!

    简单介绍下用法(目前)

    -------------------------------------------------------------------------------------

    1>.引入头文件

    #import "LPDQuoteImagesView.h"

    -----------------------------------------------------------------------------------

    2>初始化一个quoteImagesView (UIView类型)

    eg:(假设初始化一个和屏幕差不多等宽的view)

    LPDQuoteImagesView *quoteImagesView =[[LPDQuoteImagesView alloc] initWithFrame: CGRectMake(x, y, width, hight) withCountPerRowInView: 5  cellMargin: 12 ];

    //初始化 此view的frame, view里每行cell个数cell间距(如上方图1,cell上缩略图大小是根据设置自动计算的)

    注:设置frame时,我们可以根据设计人员给的cell的宽度和最大个数、排列,间距去大致计算下quoteview的size.

    quoteImagesView .maxSelectedCount = 6 ;

    //最大可选照片数

    quoteImagesView.collectionView .scrollEnabled = NO;

    //view可否滑动

    -----------------------------------------

    quoteImagesView.navcDelegate =  vc;   // vc 是一个viewController,(一般vc是指 self,即在控制器里初始化)

    / / 勉强算一个委托(委托controller弹出imagePicker但不用实现委托方法,  以后可以加一些可选协议方法在某些时机让委托对象做些事)

    [aView addSubview: quoteImagesView];

    //把咱们的view加到某一个视图上,就什么都不用管了!!!(一般来说是委托控制器里的某一个视图)

    -------------------------------------------

    -----------------------------------------------------------------------------------

    3>.获取引用图片

    NSArray<UIImage *> *imageArray = [NSArray   arrayWithArray: quoteImagesView .selectedPhotos];  

    //selectedPhotos 属性就是你看到的那些选中的照片的集合

    注:quoteImagesView.selectedPhotos为NSArray属性,引用的数组会变化,您可以在需要用到照片的方法里去拿一次照片数组,不可初始化的时候直接引用数组(此时数组为nil)。。。selectedPhotos只能反映当前状态下已选中的照片(例如上传按钮绑定的方法里去拿一次)。

    ////只需要贴上view,其他的在图库选照片,预览,保存,更新缩略图均不需要依赖新的对象参与,引入不需要额外代码,包括collect view ,一切处理响应都封在了quoteview及 “黑盒” 中。

    -----------------------------------------------------------------------------------

    效果图

    图片2(选照片界面)

    预览功能

    3.预览

    选中照片,蓝色框还有动画效果。。。。


    -----------------------------------------------------------------------------------

    其他特性:导航栏自动适应APP颜色,其他的蓝色对号,蓝色椭圆 如需要其他样式可在bundle资源中替换,选中的图片缩略图排列可设置拖拽改变位置,删除整体也带有动画效果,添加到最大数目没有➕,删除就出现等

    本库封装于TZImagePickerController, 很多业务场景下很实用,感谢!

    -------------------------------------------------------------------------------

    -------------------------------------------------------------------------------

    如果需要上传图片,必须是NSData类型的,例如

    NSArray<UIImage *>*imageArray = [NSArray arrayWithArray:_quoteImagesView.selectedPhotos];

    //取得照片数组

    NSMutableArray<NSData *>*imageDataArray = [[NSMutableArray alloc] init];

    for(UIImage *imageObject in imageArray){

    NSData *imageData = UIImageJPEGRepresentation(imageObject, 0.3);

    //UIImage转换为NSData

    [imageDataArray addObject:imageData];

    }

    然后一个个NSData类型的对象可以放在post请求formData里上传出去

    ------------------------------------------------------------------------

    https://github.com/Assuner-Lee/LPDQuoteImagesView

    如果您觉得还不错,别忘了点个星星哦,谢谢大家!!!!

    相关文章

      网友评论

      • 闪现撞墙啦宝宝:NSURL *privacyUrl = [NSURL URLWithString:@"prefs:root=Privacy&path=PHOTOS"];和这个NSURL *privacyUrl = [NSURL URLWithString:@"prefs:root=Privacy&path=CAMERA"];上架App会被拒绝。属于私有API。希望作者稍作调整一下。谢谢作者。
      • narutog17:从服务器获取的图片 怎么用LPDQuoteImagesView 来展示,要怎么弄??
      • 37c1c98d5278:怎么弹出相机啊,我设置了yes 不管用。。
      • 37c1c98d5278:怎么调相机sheet给了yes 不管用啊。。
      • Janine_:还没看代码,运行看了效果图,很好,唯一不足的事第一次加载相册时时间会有点慢,建议修改下,笔芯
      • 小桥流水青山碧海:从服务器获取的图片 怎么用LPDQuoteImagesView 来展示 主要是为了 能重新选择照片 再上传给服务器
        小桥流水青山碧海:@Assuner 流程是这样的 用LPDQuoteImagesView 来选择图片 然后上传到服务器;服务器如果发现有问题,会把这些数据重新传给我,我用LPDQuoteImagesView来展示图片,删除有问题的图片,继续选择新的图片,再上传给服务器
        小桥流水青山碧海:@Assuner 不用还原到相册 直接用LPDQuoteImagesView 这个来展示服务器返回的图片 然后可以重新选择新的图片上去 再提交到服务器
        Assuner:@小桥流水青山碧海 显示可能可以,重新还原到相册比较难,没开发
      • scscsc:大神, 有没有上传时限制图片尺寸和图片大小的功能?
      • 小蠢驴打代码:作者你好,你的bundle里面的图片我好像引用不了,功能是有,但是界面显示没有那些图片(打叉图,选择等)
      • e98dfc457ce7:那个取消按钮想改成蓝色试了很多办法了都不行,请问有好路子吗楼主?
      • JeffreyTaiT:我也写了一个
      • 小桥流水青山碧海:这个怎么设置动态高度,一行就一行的高度,如果多选的照片排到第二行,就第二行的高度,默认是三行的高度
        小桥流水青山碧海:@Assuner 可以自动调整高度了;在添加和删除 图片的时候 调用代理 来刷新界面 调整高度
        小桥流水青山碧海:@Assuner 改不来 :sweat:
        Assuner:@小桥流水青山碧海 可以先尝试自己改下
      • eb66d36cf68c:我想选择视频,有没有这个功能
        eb66d36cf68c:@Assuner 好的。
        Assuner:@eb66d36cf68c 可以参考tzimagepicker
      • r_瑞:我想问一下能不能直接设置几张图片 也就是让selectedPhotos有值 因为我要做一个编辑帖子的功能 帖子本身可能是带有图片的
        r_瑞:@Assuner 就是找不到怎么还原回去的 我直接设置没有用
        Assuner:@CrystalForest 那个selectphoto是从相册拿的图片,看看怎么还原回去吧
      • 正直的豆豆:楼主你好,我们有再次编辑的功能,所以首先拿到的是一组图片地址,然后下载展示,可以再次添加新图片。。这样是不是不支持啊?
        Assuner:可以改改试试
      • 4d8b4b91fe29:哦,我了解了,需要把这个view暴露在cell的声明里面,然后在cell所在的vc设置代理
      • 4d8b4b91fe29:navcDelegate 是针对viewController的,但是我的需要写在cell里面,我尝试从cell里面拿到当前vc,然后设置当前vc为代理,之后去当前vc遵守代理,效果是可以实现,但是总感觉体验不好...是否可以更改一下呢? 或者我把代理的类型改成id,然后在你的内部拿到当前vc可以吗?
      • 像羽毛那样轻: 小蜜 App 的?
        Assuner:@像羽毛那样轻 什么
      • 小桥流水青山碧海:可以了 :stuck_out_tongue_closed_eyes:
        Assuner:@minlanren 好
      • 小桥流水青山碧海:Specs satisfying the `LPDQuoteImagesView` dependency were found, but they required a higher minimum deployment target.
      • 小桥流水青山碧海:pod install
        Analyzing dependencies
        [!] Unable to satisfy the following requirements:

        - `LPDQuoteImagesView` required by `Podfile`

        Specs satisfying the `LPDQuoteImagesView` dependency were found, but they required a higher minimum deployment target.

        [!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.
      • 小桥流水青山碧海:- `LPDQuoteImagesView` required by `Podfile`
        pod安装失败
      • 正在输入__:点返回按钮的时候可不可以直接回到主界面啊
        Assuner:@正在输入__ 应该能装吧
        正在输入__:@Assuner 哦,还想问一下,我的项目支持的最低版本是iOS9,pod好想安装不了,如果把你的代码直接拖到项目,有那里需要注意?
        Assuner:@正在输入__ 都是返回相册
      • Jinkuro:不错不错,稍微改了下再用的,因为发现没有actionSheet,产品说点进去再拍照有点蠢;一开始用的pod,看到有isShowTakePhotoSheet,但是改了发现什么也没发生,再进去一看源码有takePhoto方法但是没有任何调用:joy: ,最后删pod直接引文件来自己改了个actionSheet出来
        Assuner:@Jinkuro 封装的tz
        Jinkuro:@Jinkuro 很好用了,不管是功能还是封装程度,都很棒的啊:+1:我进源码看了一圈,楼主功力深厚,值得学习
        Assuner:@Jinkuro 之前也是没改彻底。。
      • footSInRoad:不错,借鉴一下 ,用到工程里。
      • b64b9c7b56d3:/LPDQuoteImagesView/Classes/LPDPhotoArrangeCVlLayout.m:173:30: Property 'preferredFramesPerSecond' not found on object of type 'CADisplayLink *'
      • 布袋的世界:怎么取得选择完后的图片数组呢?

        @IBAction func postButtonTap(_ sender: UIBarButtonItem) {
        print("post")
        let imageArray = NSArray(array: (quoteImageView?.selectedPhotos!)!)
        // print(imageArray)
        }
        override func viewDidLoad() {
        super.viewDidLoad()

        let frame = CGRect(x: 0, y: 100, width: Screen_Width, height: 120)
        let quoteImageView = LPDQuoteImagesView(frame: frame, withCountPerRowInView: 3, cellMargin: CGFloat(10.0))
        quoteImageView?.collectionView.isScrollEnabled = false
        quoteImageView?.countPerRowInAlbum = 3
        quoteImageView?.navcDelegate = self
        view.addSubview(quoteImageView!)
        }
      • 0c597ab585a3:楼楼你好, 如果我只直接在控制器用self.view addsubview 就能正常弹出照片选择器, 如果在一个自定义的view上添加LPDQuoteImagesView, 就弹不出了, 试了下获取view所在的控制器弹出, 还是不行...
        Assuner:@顾不上回头的奔跑者 使用TZImagepicker也是可以的,我可以改下把选视频的属性暴露出来
        顾不上回头的奔跑者:大神你好,新人想用下你的demo 不过这个三方能上传视频吗??我按照你的方法添加了,但是只能选择图片,自动把我相册里的视频过滤掉了,忘大神指点
        Assuner:@vanneyla 你需要保证quoteview 的navdelegate为一个控制器,quoteview 贴到哪都行
      • overla5:你好。如果我选择照片之后,pop到前一个界面,把照片带过去。再次回来可以赋值,照片数组给这个view吗?就是知道选了哪些并且还可以修改?
      • yyggzc521:有这么一个需求假如maxImagesCount为3,初始化TZImagePickerController后就显示3个 “+”图标,请问大神应该怎么实现?谢谢!
        Assuner:@yyggzc521 使用三个按钮,三个按钮打开同一个tzimagecontroller,选完图片在按钮上依次附上各个缩略图
      • 31f05c64741c:您好!我用你的库但是NSArray<UIImage *>*imageArray = [NSArray arrayWithArray:_quoteImagesView.selectedPhotos];
        这个方法得到的是空数据是为什么呢?
        Assuner:@型银不离 你调试的话必须在选完照片后po 它的属性,才能拿到select photo
        Assuner:@型银不离 不应该啊,quoteImageview 的selectphotos是 拿到了 picker 的图片
        31f05c64741c:你的view必须得写在viewdidload,但是怎么去调用选择图片后返回的数据。这个逻辑我没想明白。
      • 林凌子文:用了下发现2个问题。 一个是AutoLayout的支持问题。一个就是cellMargin没有考虑cell的删除按钮的位置, 导致删除按钮会被覆盖,建议将删除按钮半透明放到图片的右上角位置
        Assuner:@林凌子文 其实可以放一个类别去调整删除按钮的大小,但考虑到按钮可能太小就作罢了
      • 0c597ab585a3:楼楼你好, pod search 为啥搜索不到哇
        Assuner:@vanneyla 更新你的pod
        0c597ab585a3:@Assuner [!] Unable to find a pod with name, author, summary, or descriptionmatching `LPDQuoteImagesView`
        Assuner:@vanneyla 过段时间就行了,可以直接install
      • __teemo:增加或者减少图片有没有代理?我想根据图片的个数确定LPDQuoteImagesView的高度让图片都直接能看到,谢谢
        Assuner:@foam涛 那个代理现在只是为了一个找一个controller 弹出照片选择器,并没什么用
        __teemo:@Assuner 恩,用你写的那个代理试着写的适配了下可以用,还是你封装的好 哈哈 ,谢了
        Assuner:@foam涛 代理已经封装在了view中,因为定制viewquoteImagesview还有间距,还有换行,比较麻烦,还可能做quoteImagesview的长宽的适配, 所以建议自己根据 cell个数估计外面view的frame 。。。当然,你也可以自己写写,新加一个初始化方法。。。
      • TOP_top:请问NSArray<UIImage *> *imageArray = [NSArray arrayWithArray:quoteSystemImagesView.selectedPhotos]; 这个imageArray里面的数据类型是NSData吗? 需要上传服务器的话,可以直接传?
        Assuner:@TOP_top NSArray<>括号内是指明了类型,普通的NSArray里边的对象是id类型的,,未指明
        Assuner:@TOP_top 你需要把数组里的一个个UIimage转为NSData, 例如
        NSArray<UIImage *> *imageArray = [NSArray arrayWithArray:_quoteSystemImagesView.selectedPhotos];
        NSMutableArray<NSData *> *imageDataArray = [[NSMutableArray alloc] init];
        for(UIImage *imageObject in imageArray){
        NSData *imageData = UIImageJPEGRepresentation(imageObject, 0.3);
        [imageDataArray addObject:imageData];
        }
      • valy9523:反正我也看不懂 感觉很酷的样子
        Assuner:@valy9523 这已经
      • 4f38d8742e72:占位, 有空再看

      本文标题:iOS仿微信qq图片选择器imagePicker --只需要初始

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