當前位置:編程學習大全網 - 人物素材 - iOS shareExtension總結

iOS shareExtension總結

下面主要說壹下再整個過程中個人覺得比較重要的幾個地方

這些屬性根據自己的需求設置好數量就行。說壹下可能遇到的問題

1.1、 NSExtensionActivationSupportsText,主要用於備忘錄之類文本分享,網上資料有的說設置bool類型,有的說設置string類型,值為YES,我這邊都不好使,最後設置為值為1的number類型可以了。如果跟我遇到同樣問題的可以試下

1.2、 在App Store分享APP時,有兩個NSExtensionItem,UTI分別為public.url和public.png,loadItemForTypeIdentifier獲取item類型為NSURL和UIImage,截圖分享的item類型也為UIImage

在自定義VC的viewDidLoad異步獲取分享數據,獲取完畢刷新UI

這塊是這個功能踩坑最多的地方,因為在widget中內存限制為120M,圖片、視頻、文件,隨隨便便都超了,這裏說壹下幾個需要註意的地方

這裏主要是多圖時可能會出現內存過大的情況,我這邊的處理是直接把圖片copy到***享目錄,然後跳轉主App裏發送原圖。也可以直接將圖片壓縮後轉成base64str數組然後寫入***享目錄,不過壓縮比例不好控制,壓縮後的總大小,小圖不能壓縮等都要考慮進去,下面把幾個用到的方法和處理時機貼壹下

3.1.1、 圖片壓縮方法

3.1.2、 圖片base64str互轉

3.1.3 、獲取主要信息loadItemForTypeIdentifier方法裏保存圖片地址,用於UI展示及後續寫入***享目錄

3.1.4、 確認分享時把圖片批量copy到***享目錄,也可以選擇壓縮後轉base64str數組寫入文件

3.1.5、 呼起主APP後先從獲取圖片地址數組,在通過圖片地址取分享數據

壹方面是UI展示所需要的內容,如視頻封面圖、時長、大小,文件的大小、類型

這裏說壹下取文件大小時不能取NSData得length方式,大文件會導致內存溢出,應該使用NSFileManager獲取,這裏要註意下通過loadItemForTypeIdentifier取得的路徑要先stringByRemovingPercentEncoding解碼再截取/var之後的路徑,比如妳取得文件路徑為file%3A%2F%2F%2Fprivate%2Fvar%2Fmobile%2FLibrary%2FMobile%20Documents%2Fcom%7Eapple%7ECloudDocs%2F%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%A4%B9%2Faaa.pdf

那妳要用/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/未命名文件夾/aaa.pdf去取文件大小,下面把主要用的方法貼壹下

3.2.1、 文件大小以及格式化

3.2.2、 獲取視頻時長(這裏要用全路徑)

3.2.3、 獲取視頻封面圖(這裏也要用全路徑)

3.2.4、 獲取文件類型對應切圖,把圖片素材替換為妳們UI給的切圖

因為需要把分享的文件存儲到group***享目錄裏去,當文件超過120M的時候,就不能使用writeToURL了,要不會內存溢出,這裏使用NSFileManager的copyItemAtPath,在使用這個函數的時候兩個路徑都要使用解碼後再截取/var之後的路徑

目前能想到的就這麽多啦,如果有什麽疑問或者發現什麽不足,歡迎評論指正。

  • 上一篇:【教育故事】壹次特殊的家訪
  • 下一篇:工程施工日誌
  • copyright 2024編程學習大全網