亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現微信/QQ顯示最近拍攝圖片的功能實例代碼

2020-07-26 02:53:05
字體:
來源:轉載
供稿:網友

 如果你剛剛拍攝了圖片,在使用微信/QQ發生消息時會顯示“你可能要發送的圖片”,

實現原理:

1、打開或重新進入聊天窗口時查詢圖庫最新的照片, 對比拍照時間和當前時間的差,當低于閾值(例如一分鐘)時就顯示出來。 PS:閾值是邏輯上判斷是否最近的依據。優點:總能找到最近拍攝的圖片; 缺點:每次都要查詢圖片數據,響應較慢。

2、注冊圖庫變化監聽(觀察者模式), 響應圖庫的增刪改事件, 拿到變化圖片數據后做對應的邏輯。 優點: 實時響應; 缺點:影響性能, 在注冊監聽前拿不到變化數據。

實現方式:

1、在info.plist文件中添加訪問相機數據的權限。

2、在啟動應用后要獲取相機權限, 調用PHPhotoLibrary.requestAuthoriztion方法,提示內容是plist對應相機權限字段內容(PS:跟Android的動態權限獲取是一個套路)。

3、獲取相機權限后,要緩存所有PHAsset類型的照片記錄(不包含圖片二進制數據,所有不用擔心內存溢出); 緩存所有圖片記錄是為了后續比較變化使用, 邏輯上是變化前數據。

4、觀察者模式的register, 注意在適當的地方要執行unregisterChangeObserver。

5、在回調函數photoLibraryDidChange里做圖庫變化后的邏輯, 這里的PHChange類可以跟前面緩存的變化前數據比較并得到變化的部分(包括新增、刪除、修改,厲害了; Android沒有這么方便的API。。。)。

6、使用DispatchQueue.main.async是主線程異步執行, 作用同Android主線程Handler的sendMessage。這是觀察者模式的標準做法,避免阻塞通知隊列。

7、使用PHCachingImageManager取出PHAsset的圖片數據ImageView對象。

8、顯示到UI里。

參考代碼:

import UIKit import Photos //使用圖庫功能時必須引用這個包 //顯示最近拍攝的照片為縮略圖 class ViewController: UIViewController, PHPhotoLibraryChangeObserver {  var assetsFetchResults:PHFetchResult<PHAsset>!  var imageManager: PHCachingImageManager! //帶緩存的圖片管理對象  var imageView: UIImageView! //用于顯示縮略圖  var assetGridThumbnailSize: CGSize! //縮略圖大小  override func viewDidLoad() {   super.viewDidLoad()   // Do any additional setup after loading the view, typically from a nib.   imageView = UIImageView()   imageView.frame = CGRect(x: 50, y: 50, width: 100, height: 100)   imageView.contentMode = .scaleAspectFit   imageView.clipsToBounds = true   self.view.addSubview(imageView)   self.imageManager = PHCachingImageManager() //初始化和充值緩存   let scale = UIScreen.main.scale //像素比   assetGridThumbnailSize = CGSize(width: imageView.frame.width*scale,           height: imageView.frame.height*scale)   //申請權限   PHPhotoLibrary.requestAuthorization({ (status) in    if status != .authorized {     return    }    //獲取所有圖片資源(按照創建時間排序)    let allPhotoOptions = PHFetchOptions()    allPhotoOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate",                 ascending: false)] //排序方式    allPhotoOptions.predicate = NSPredicate(format: "mediaType = %d",              PHAssetMediaType.image.rawValue) //類型    self.assetsFetchResults = PHAsset.fetchAssets(with: .image,                options: allPhotoOptions) //查詢照片類型    var i = 0    while i<self.assetsFetchResults.count {     let asset = self.assetsFetchResults[i]     print(" 創建時間:/(asset.creationDate?.description)") //打印所有圖片的創建時間     i += 1    }    if (self.assetsFetchResults.count > 0) {     //顯示最近一張拍攝的圖片(也可以根據拍攝時間遠近決定是否要顯示)     self.imageManager.requestImage(for: self.assetsFetchResults[0],  //最近一張圖片             targetSize: self.assetGridThumbnailSize,             contentMode: .aspectFill,             options: nil, resultHandler: { (image, info) in             self.imageView.image = image //取出圖像并顯示出來     })    }    print("圖片數量:/(self.assetsFetchResults?.count)")    //注冊監聽資源變化    PHPhotoLibrary.shared().register(self) //刪除是unregisterChangeObserver   })  }  override func didReceiveMemoryWarning() {   super.didReceiveMemoryWarning()   // Dispose of any resources that can be recreated.  }  func photoLibraryDidChange(_ changeInstance: PHChange) {   guard let changes = changeInstance.changeDetails(for: self.assetsFetchResults as! PHFetchResult<PHObject>) else {    return   }   //異步執行,避免阻塞圖片變化事件隊列   DispatchQueue.main.async {    if let result = changes.fetchResultAfterChanges as? PHFetchResult<PHAsset> {     self.assetsFetchResults = result //差異結果    }    //判斷是否有新增圖片或刪除圖片的情況    if !changes.hasIncrementalChanges || changes.hasMoves {     return    } else {     print("圖片數據有變化")     if let indexs = changes.changedIndexes, indexs.count>0 { //不顯示0的情況      print("有/(indexs.count)張圖片發生變化")     }     if let removes = changes.removedIndexes, removes.count>0 {      print("刪除了/(removes.count)張圖片")     }     if let inserts = changes.insertedIndexes, inserts.count>0 {      //有新增圖片      print("新增了/(inserts.count)張圖片")      let picture = self.assetsFetchResults[inserts.first!]      self.imageManager.requestImage(for: picture,              targetSize: self.assetGridThumbnailSize,              contentMode: .aspectFill,              options: nil, resultHandler: { (image, option) in              self.imageView.image = image //取出圖像并顯示出來      })     }    }   }  } } 

以上所述是小編給大家介紹的iOS實現微信/QQ顯示最近拍攝圖片的功能實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲aⅴ日韩av电影在线观看| 欧美性xxxx极品hd满灌| 欧美精品一区二区三区国产精品| 久久久久免费视频| 91精品国产综合久久香蕉的用户体验| 欧美高清性猛交| 亚洲欧美成人在线| 深夜精品寂寞黄网站在线观看| 亚洲国产高潮在线观看| 精品视频偷偷看在线观看| 亚洲一区二区久久久| 77777亚洲午夜久久多人| 欧美在线视频一二三| 亚洲欧美中文日韩在线v日本| 欧美极品少妇xxxxⅹ裸体艺术| 精品视频偷偷看在线观看| 精品视频久久久久久久| 57pao国产成人免费| 91精品国产91久久久久久最新| 91国产美女在线观看| 精品免费在线观看| 中文字幕精品在线视频| 麻豆精品精华液| 成人午夜一级二级三级| 日韩欧美在线第一页| 国产精品久久久精品| 欧美午夜精品久久久久久久| 羞羞色国产精品| 欧美精品日韩三级| 国产精品视频区1| 国产91色在线| 精品久久久999| 欧美激情一二区| 国产精品美女av| 一区二区在线免费视频| 黑人精品xxx一区一二区| 日韩国产高清视频在线| 亚洲欧洲午夜一线一品| 国产福利精品av综合导导航| www.xxxx精品| 久久久久久久久久av| 久久久久久久999| 欧美精品免费在线观看| 97精品国产97久久久久久| 一区二区国产精品视频| 精品福利视频导航| 亚洲国产91色在线| 一本色道久久88亚洲综合88| 影音先锋欧美在线资源| 日韩欧美极品在线观看| 中文欧美在线视频| 久久久免费精品| 国产一区二区三区在线视频| 欧美激情一区二区久久久| 久久精品夜夜夜夜夜久久| 国产精品视频永久免费播放| 亚洲精品在线视频| 国产999精品视频| 亚洲美女动态图120秒| 国外日韩电影在线观看| 欧美另类老肥妇| 亚洲精品乱码久久久久久金桔影视| 91丨九色丨国产在线| 国产做受高潮69| 欧美极品少妇xxxxx| 亚洲精品www久久久久久广东| 91精品在线观| 8050国产精品久久久久久| 久热精品视频在线观看一区| 久久久久久久久久久人体| 97久久伊人激情网| 亚洲国产91精品在线观看| 欧美成年人网站| 一区二区欧美激情| 欧美午夜美女看片| 欧美日韩性生活视频| 久久久久久久久久久免费| 91在线视频九色| 久久精品国产欧美激情| 热99久久精品| 亚洲国产欧美在线成人app| 欧美一区亚洲一区| 国产丝袜视频一区| 日韩美女福利视频| 欧美大全免费观看电视剧大泉洋| 亚洲色图17p| 精品网站999www| 亚洲女人被黑人巨大进入al| 久久国产天堂福利天堂| 国产精品7m视频| 欧美又大又硬又粗bbbbb| 黑人巨大精品欧美一区二区三区| 久久精品美女视频网站| 国产99视频精品免视看7| 91国偷自产一区二区三区的观看方式| 国产一区二区三区直播精品电影| 91成人国产在线观看| 色先锋资源久久综合5566| 国产精品视频资源| 91久久久久久久一区二区| 日韩欧美成人区| 欧美国产一区二区三区| 亚洲男人第一网站| 久久免费在线观看| 欧美国产亚洲精品久久久8v| 日韩动漫免费观看电视剧高清| 亚洲午夜精品久久久久久久久久久久| 欧美日韩亚洲国产一区| 国内精品国产三级国产在线专| 中文字幕日韩欧美精品在线观看| 青青草成人在线| 欧美肥臀大乳一区二区免费视频| 久久天堂电影网| 久久亚洲春色中文字幕| 欧美国产日韩免费| 亚洲日韩中文字幕在线播放| 久久av中文字幕| 欧美综合第一页| 亚洲乱码av中文一区二区| 九九热最新视频//这里只有精品| 岛国av一区二区三区| 日韩av手机在线看| 亚洲系列中文字幕| 欧美夫妻性视频| 黑人巨大精品欧美一区二区三区| 久色乳综合思思在线视频| 欧美精品videos性欧美| 最新的欧美黄色| 日韩精品在线观看一区二区| 欧美理论电影在线观看| 欧美孕妇孕交黑巨大网站| 欧洲成人在线观看| 91精品国产一区| 久久成人一区二区| 日韩hd视频在线观看| 欧洲一区二区视频| 亚洲福利在线观看| 国产精品久久久久av| 97国产精品视频人人做人人爱| 久99九色视频在线观看| 欧美在线观看网址综合| 久久国产精品首页| 亚洲www永久成人夜色| 欧美日产国产成人免费图片| 亚洲va欧美va国产综合剧情| 国产精品青草久久久久福利99| 久久精品国产成人| 亚洲精品在线观看www| 中文字幕亚洲欧美日韩在线不卡| 91免费观看网站| 亚洲欧美国产va在线影院| 久久国产精品视频| 亚洲最大在线视频| 日韩有码在线观看| 国产欧美一区二区三区久久| 精品国产一区久久久| 岛国视频午夜一区免费在线观看| 操91在线视频| 在线视频精品一| 精品自拍视频在线观看| 国产精品久久久久99| 亚洲天堂av在线播放| 深夜福利91大全| 欧美激情免费看|