让UIImagePickerController支持多选

由于项目中需要同时选择多张图片,但是系统提供的UIImagePickerController并不支持多选,调查了一些开源的框架,发现都是使用ALAssetsLibrary库并且都是从头开始搭建UI,好处就是自定义强,坏处就是工作量大,容易出Bug,维护方面肯定没有Apple做的好。基于以上所依我打算在UIImagePickerController的基础上为其添加多选支持。

思路如下:

  • 要让UIImagePickerController支持多选第一步我们得截获点击事件

通过XcodeDebug View Hierarchy功能我们知道系统使用PUCollectionView来现实图片的布局,使用PUPhotoView来显示一张图片。通过名字我们很容易猜到PUCollectionView是继承与UICollectionView,顺藤摸瓜知道PUPhotoView是继承与UICollectionViewCell,根据以上我们就知道如何截获点击事件了,只需要重写delegate对象上的- (void)collectionView:(UICollectionView*)collectionView didSelectItemAtIndexPath:(NSIndexPath*)indexPath;方法即可.
说明:在后续的调查中发现PUCollectionViewdelegate并没有响应-(void)collectionView:(UICollectionView*)collectionView didSelectItemAtIndexPath:(NSIndexPath*)indexPath;而是响应了- (BOOL)collectionView:(UICollectionView*)collectionView shouldSelectItemAtIndexPath:(NSIndexPath*)indexPath;,很明显系统是直接在该方法里完成的后续操作,所以我们重写delegate对象上的该方法就可以截获到点击事件

让UIImagePickerController支持多选_第1张图片
howitworks.png

我们需要重写dataSource对象上的- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath;方法即可

主要思路就是上面这两点,最终的效果如下:


demo.gif

源码请移步Github

你可能感兴趣的:(让UIImagePickerController支持多选)