6

iOS アプリの写真の共有拡張機能を開発しています。拡張機能内で、NSItemProvider から UIImage オブジェクトを正常に取得できます。

ただし、共有ユーザーの既定値内に画像データ全体を保存することなく、コンテナー アプリと画像を共有できるようにしたいと考えています。ユーザーが共有拡張機能で選択したイメージの PHAsset を取得する方法はありますか (デバイスから選択した場合)?

写真フレームワークに関するドキュメント ( https://developer.apple.com/library/ios/documentation/Photos/Reference/Photos_Framework/ ) には、「このアーキテクチャにより、複数のスレッドまたは複数のアプリとアプリ拡張機能からの同じアセット。」

その行は、拡張機能とコンテナー アプリの間で同じ PHAsset を共有する方法があると思わせますが、それを行う方法をまだ見つけていませんか? それを行う方法はありますか?

4

2 に答える 2

9

これは、NSItemProviderが次の形式の URL を提供する場合にのみ機能します。

file:///var/mobile/Media/DCIM/100APPLE/IMG_0007.PNG

これは、すべてのアセットに常に当てはまるとは限りませんが、URL が次のように返される場合:

file:///var/mobile/Media/PhotoData/OutgoingTemp/2AB79E02-C977-4B4A-AFEE-60BC1641A67F.JPG

その場合、PHAssetはアセットを見つけられません。さらに、後者はファイルのコピーであるため、非常に大きな画像/ビデオがある場合、iOS はそのOutgoingTempディレクトリにそれを複製します。ドキュメントのどこにも、いつ削除されるかは書かれていませんが、うまくいけばすぐに削除されます。

これは、共有拡張機能と PHPhotoLibrary フレームワークの間に Apple が残した大きなギャップだと思います。Apple はそれを閉じるための API を作成するべきでした。

于 2016-12-01T18:54:17.523 に答える