1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      iOS實現(xiàn)微信/QQ顯示最近拍攝圖片的功能實例代碼-創(chuàng)新互聯(lián)

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

      主要從事網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、自適應(yīng)網(wǎng)站建設(shè)、程序開發(fā)、微網(wǎng)站、成都小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等多方位專業(yè)化運作于一體,具備承接不同規(guī)模與類型的建設(shè)項目的能力。

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

      實現(xiàn)原理:

      1、打開或重新進入聊天窗口時查詢圖庫最新的照片, 對比拍照時間和當前時間的差,當?shù)陀陂撝担ɡ缫环昼姡r就顯示出來。 PS:閾值是邏輯上判斷是否最近的依據(jù)。優(yōu)點:總能找到最近拍攝的圖片; 缺點:每次都要查詢圖片數(shù)據(jù),響應(yīng)較慢。

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

      實現(xiàn)方式:

      1、在info.plist文件中添加訪問相機數(shù)據(jù)的權(quán)限。

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

      2、在啟動應(yīng)用后要獲取相機權(quán)限, 調(diào)用PHPhotoLibrary.requestAuthoriztion方法,提示內(nèi)容是plist對應(yīng)相機權(quán)限字段內(nèi)容(PS:跟Android的動態(tài)權(quán)限獲取是一個套路)。

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

      4、觀察者模式的register, 注意在適當?shù)牡胤揭獔?zhí)行unregisterChangeObserver。

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

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

      7、使用PHCachingImageManager取出PHAsset的圖片數(shù)據(jù)ImageView對象。

      8、顯示到UI里。

      參考代碼:

      import UIKit 
      import Photos //使用圖庫功能時必須引用這個包 
      //顯示最近拍攝的照片為縮略圖 
      class ViewController: UIViewController, PHPhotoLibraryChangeObserver { 
       var assetsFetchResults:PHFetchResult! 
       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) 
        //申請權(quán)限 
        PHPhotoLibrary.requestAuthorization({ (status) in 
         if status != .authorized { 
          return 
         } 
         //獲取所有圖片資源(按照創(chuàng)建時間排序) 
         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 0) { 
          //顯示最近一張拍攝的圖片(也可以根據(jù)拍攝時間遠近決定是否要顯示) 
          self.imageManager.requestImage(for: self.assetsFetchResults[0],  //最近一張圖片 
                  targetSize: self.assetGridThumbnailSize, 
                  contentMode: .aspectFill, 
                  options: nil, resultHandler: { (image, info) in 
                  self.imageView.image = image //取出圖像并顯示出來 
          }) 
         } 
         print("圖片數(shù)量:\(self.assetsFetchResults?.count)") 
         //注冊監(jiān)聽資源變化 
         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) else { 
         return 
        } 
        //異步執(zhí)行,避免阻塞圖片變化事件隊列 
        DispatchQueue.main.async { 
         if let result = changes.fetchResultAfterChanges as? PHFetchResult { 
          self.assetsFetchResults = result //差異結(jié)果 
         } 
         //判斷是否有新增圖片或刪除圖片的情況 
         if !changes.hasIncrementalChanges || changes.hasMoves { 
          return 
         } else { 
          print("圖片數(shù)據(jù)有變化") 
          if let indexs = changes.changedIndexes, indexs.count>0 { //不顯示0的情況 
           print("有\(zhòng)(indexs.count)張圖片發(fā)生變化") 
          } 
          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 //取出圖像并顯示出來 
           }) 
          } 
         } 
        } 
       } 
      }

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      標題名稱:iOS實現(xiàn)微信/QQ顯示最近拍攝圖片的功能實例代碼-創(chuàng)新互聯(lián)
      文章鏈接:http://www.ef60e0e.cn/article/goeio.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        舟曲县| 开平市| 曲水县| 雷山县| 常山县| 健康| 吉木乃县| 芮城县| 武强县| 五华县| 东乡族自治县| 边坝县| 三台县| 那曲县| 庆元县| 平乐县| 营口市| 孟村| 安庆市| 克山县| 灵武市| 红原县| 鲁甸县| 乐业县| 饶平县| 中山市| 元谋县| 溆浦县| 南漳县| 兴山县| 卫辉市| 宁强县| 新平| 天长市| 扎囊县| 岑溪市| 若尔盖县| 昭平县| 买车| 房产| 安陆市|