iOS实现微信/QQ显示最近拍摄图片的功能实例代码

  

,如果你刚刚拍摄了图片,在使用微信/QQ发生消息时会显示”你可能要发送的图片”,

  

 iOS实现微信/QQ显示最近拍摄图片的功能实例代码

  

  

1,打开或重新进入聊天窗口时查询图库最新的照片,对比拍照时间和当前时间的差,当低于阈值(例如一分钟)时就显示出来。PS:阈值是逻辑上判断是否最近的依据。优点:总能找到最近拍摄的图片;缺点:每次都要查询图片数据,响应较慢。

  

2,注册图库变化监听(观察者模式),响应图库的增删改事件,拿到变化图片数据后做对应的逻辑。优点:实时响应;缺点:影响性能,在注册监听前拿不到变化数据。

  

  

1,在info.plist文件中添加访问相机数据的权限。

  

 iOS实现微信/QQ显示最近拍摄图片的功能实例代码

  

2,在启动应用后要获取相机权限,调用PHPhotoLibrary.requestAuthoriztion方法,提示内容是plist对应相机权限字段内容(PS:跟安卓的动态权限获取是一个套路)。

  

3,获取相机权限后,要缓存所有PHAsset类型的照片记录(不包含图片二进制数据,所有不用担心内存溢出);缓存所有图片记录是为了后续比较变化使用,逻辑上是变化前数据。

  

4,观察者模式的注册,注意在适当的地方要执行unregisterChangeObserver。

  

5,在回调函数photoLibraryDidChange里做图库变化后的逻辑,这里的PHChange类可以跟前面缓存的变化前数据比较并得到变化的部分(包括新增、删除,修改,厉害了,安卓没有这么方便的API…)。

  

6,使用DispatchQueue.main。异步是主线程异步执行,作用同Android主线程处理程序的sendMessage。这是观察者模式的标准做法,避免阻塞通知队列。

  

7、使用PHCachingImageManager取出PHAsset的图片数据ImageView对象。

  

8,显示到UI里。

  

        进口UIKit//导入照片使用图库功能时必须引用这个包//显示最近拍摄的照片为缩略图   类ViewController: ui, PHPhotoLibraryChangeObserver {   var assetsFetchResults: PHFetchResult !   var imageManager: PHCachingImageManager !//带缓存的图片管理对象   var imageView: UIImageView !//用于显示缩略图   var assetGridThumbnailSize: CGSize !//缩略图大小   覆盖func viewDidLoad () {   super.viewDidLoad ()//做任何额外的设置加载视图后,通常从笔尖。   imageView=UIImageView ()   imageView.frame=CGRect中(x: 50 y: 50,宽度:100年,身高:100)   imageView。内容模式=.scaleAspectFit   imageView。clipsToBounds=true   self.view.addSubview (imageView)   自我。imageManager=PHCachingImageManager()//初始化和充值缓存   让规模=UIScreen.main。规模//像素比   assetGridThumbnailSize=CGSize(宽度:imageView.frame.width *规模,   高度:imageView.frame.height *规模)//申请权限   PHPhotoLibrary。requestAuthorization({(状态)   如果状态!=.authorized {   返回   }//获取所有图片资源(按照创建时间排序)   让allPhotoOptions=PHFetchOptions ()   allPhotoOptions。sortDescriptors=[NSSortDescriptor(关键:“创建日期”,   提升:false)]//排序方式   allPhotoOptions。谓语=NSPredicate(格式:“mediaType=% d”,   PHAssetMediaType.image.rawValue)//类型   自我。assetsFetchResults=PHAsset。fetchAssets (: .image,   选项:allPhotoOptions)//查询照片类型   var i=0   虽然iiOS实现微信/QQ显示最近拍摄图片的功能实例代码