2017-02-02 3 views
0

少なくとも20枚の写真を10mb以上の大きさで出荷する予定です。ユーザーがかなり拡大する可能性のある写真ですので、解像度をかなり高く保つ必要があります。私たちはまだそれらを小さくしようとしていますが、それでもそれぞれが7MB未満になることはありません。iOS swiftで大きな画像を保存する

画像はアプリとともに出荷することができ、追加の画像もダウンロードすることができます。写真がオフラインで利用できるようにするには、ユーザーがアプリケーションをダウンロードした後で、アプリが遠隔地の研究者によって使用されるようにする必要があります。

どのような方法で保存するのが最適ですか、iOS Swift 3に保存する方法は?

ご協力いただきありがとうございます。

+1

まず、これはSwift3とは関係ありません。資産はプログラミング言語と関係がないため。この大きなファイルの場合、タイルには意味があります。デモ:https://developer.apple.com/library/content/samplecode/PhotoScroller/Introduction/Intro.html – rckoenes

答えて

2

あなたの写真をアプリケーションのドキュメントディレクトリに保存し、そのパスをSQLite DBに保存することができます。

2

ルールはありませんが、ベストプラクティスはありません。
Xcodeイメージアセットではなく、リソースに直接保存することをお勧めします。imageNamed:メソッドをUIImageで呼び出すことができ、キャッシュイメージの副作用があるからです。
次に、画像名の配列を含むplistファイルを作成し、ここから情報を取得できます。より複雑なものが必要な場合は、Core Dataがありますが、あなたの仕様でそのアプリケーションを見ることはできません。

メモリ内の非圧縮画像のサイズはどのくらいですか?あなたのイメージは、それらが圧縮されているJPGに約10MBの場合はバイト単位で
約 式n_pixel_height * n_pixel_width * n_channelsは、このように、彼らはメモリの膨大な量を取ることを意味し、

(チャネルのための8ビットを想定します)。この種のデバイス上のメモリは貴重で短いリソースです。
あなたのアプリがメモリリミットを超えた場合、didReceiveMemoryWarningのようなコールバックのセットの後に、十分なメモリを解放しないと、アプリが強制終了されます。
シミュレータがあなたのマックリソースを使用しているので、この場合はシミュレータ上ではなく、デバイス上で試してみてください。
大きな画像を扱う方法は?
CATiledLayerを使用すると、オンラインで多くのチュートリアルを見つけることができます。 CATiledLayerは、レイヤーのタイルを作成します。各タイルは、画像の一部に対応する必要があり、可視のときにのみ描画します。
残念ながら、これは非同期的にこれはあなたのタイルが正確に同時に表示されないことを意味します。その問題を避けるためのいくつかの戦略があります。その1つはappleのsample codeで説明されています。
もちろん、解決する必要がある問題があります。どのようにして大きな画像をタイルにカットできますか?
プログラムで行うことも、アプリケーションのリソースとして既に切り捨てて提供することもできます。

関連する問題