Swift中实现相册的多选

作者: smalldu | 来源:发表于2015-10-17 01:18 被阅读3283次

    在iOS中实现相册多选的思路是先从资源中拿出相片,然后放在collectionView中(也可以自己自定义随便的view,容器能放图就行)。然后实现在collectionView中多选就可以了。

    要从系统中取得照片资源,需要用到 AssetsLibrary.framework 。它里面有取照片视频等资源的方法。

    关于读取这些资源的方法,请前往ALAsset,ALAssetsLibrary,ALAssetsgroup常见属性及用法

    这个应该是比较详细的了。

    我自己也根据这个东西自己做了个多选相册的,抛砖引玉。希望大家给出更好的作品。效果如下:

    相册多选

    项目源码:https://github.com/smalldu/swiftPickMore

    在做这个的时候,遇到一个坑,在这里和大家分享下。

    非托管对象(Unmanaged Objects)
    当 Swift 导入 unannotated 的APIs时,编译器将不会自动地对返回的 Core Foundation 对象进行内存管理托管。Swift 将这些返回的 Core Foundation 对象封闭在一个Unmanaged结构中。那些间接返回 Core Foundation 的对象也是非托管的。

    而我这里就用到一个ALAsset对象的aspectRatioThumbnail方法返回Unmanaged对象,所以在这里使用takeUnretainedValue() 这个方法将它转换为内存管理的对象,刚开始一直用takeRetainedValue()一只报野指针 坑了好久。。现在代码里还有一处没有改好像。。

    相关文章

      网友评论

      • 水爱上鱼:更新了好多语法,楼主更新下项目呗。谢啦
      • a0b5cf7329ba:项目运行不起,大哥
      • 政揚:感谢大大的分享,小弟看了觉得非常厉害,很有兴趣深入研究,我最近才开始在学习写ios,想请教大哥如何将选取图的图片post出去,或者其他方式传送,實在十分感谢!
        smalldu:@caedb7516576 太客气了
        政揚:@大石头布 十分感谢大哥迅速地回应!小弟立马点击网站开始学习!谢谢您!
        smalldu:@caedb7516576 这篇文章写的有点早 这种方式已经过时了,我写了新的文章有关取相册的 和微信的差不多你可以看看那篇,也有源码
        http://www.jianshu.com/p/673e68fa60e3
      • qluojieq:当相片比较多的时候,可能就是超过一屏幕,然后滑动就会死掉(exc_bad_access(code=1,address=0x12345445)),这个问题怎么破
        cd7875ee1e5f:@singerstone 兄弟 帮个忙 谢谢
        cd7875ee1e5f:@45bedd902c76 我改成你这样了 还是会崩掉怎么办?
        qluojieq:@45bedd902c76

        aspectRatioThumbnail().takeUnretainedValue())
        //thumbnail().takeUnretainedValue()
        改好了,原来这个方法的问题,
      • b19707134332:非托管对象倒是一个知识点。C#这样的语言也有这个概念,不会自动回收的内容,不知道有没有内存泄露的顾虑
      • AugustRush:IOS8 以前是这样做,iOS8以及以后看看PhotoKit吧
        奥鼓斯特:@大石头布 没没没,只是交流下😂
        smalldu:@AugustRush PhotoKit 是系统的框架吗?原谅我是个菜鸟
      • 符武:谢谢哈,我 项目也需要。
        符武:@大石头布 从ViewController选取图片返回getController之后,再选取图片,发现原来的图片没有了。。。怎样修改呢??是在getcontroller的数组添加image吗
        smalldu:@符武 拿去用吧,取照片资源用单例,点选照片的时候提前加载这些资源会更好,照片多了就不会有延时了
      • 懒懒加1:好厉害

      本文标题:Swift中实现相册的多选

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