2017-02-02 2 views
0

Ich plane, eine App mit mindestens 20 Bildern zu versenden, die jeweils 10mb groß sein können. Sie sind Bilder, bei denen der Benutzer wahrscheinlich ziemlich weit heranzoomt, daher ist es erforderlich, die Auflösung ziemlich hoch zu halten. Wir versuchen immer noch, sie kleiner zu machen, aber trotzdem ist es unwahrscheinlich, dass sie jeweils weniger als 7mb sein werden.Speichern großer Bilder in iOS swift

Die Bilder können sowohl mit der App als auch mit zusätzlichen Bildern heruntergeladen werden. Voraussetzung ist, dass die Bilder offline verfügbar sind, sobald der Nutzer sie herunterlädt, da die App von Forschern in abgelegenen Gebieten verwendet werden soll.

Was ist der beste Mechanismus, um sie zu speichern und wie sollte ich sie in iOS Swift 3 speichern?

Vielen Dank für Ihre Hilfe im Voraus.

+1

Zunächst hat dies nichts mit Swift3 zu tun. Da Assets keine Beziehung zur Programmiersprache haben. Für diese großen Dateien wäre es sinnvoll, Kacheln zu verwenden. Demo hier: https://developer.apple.com/library/content/samplecode/PhotoScroller/Introduction/Intro.html – rckoenes

Antwort

2

Sie können Ihre Bilder im Dokumentenverzeichnis der App speichern und den Pfad in SQLite DB speichern.

2

Es gibt keine Regeln, sondern eine Reihe von Best Practices.
Um sie zu speichern, empfehle ich, sie direkt in Ihre Ressourcen zu speichern, nicht Xcode Bild Asset, dies ist, weil "Bild Asset" kann nur mit der imageNamed: Methode von aufgerufen werden, die die Nebenwirkung von Cache-Images hat.
Dann können Sie eine plist Datei mit einem Array von Bildnamen erstellen, und holen Sie Ihre Informationen von hier. Wenn Sie etwas komplizierteres benötigen, gibt es Core Data, aber ich kann keine Anwendung davon mit Ihrer Spezifikation sehen.

Welche Größe hat ein unkomprimiertes Bild im Speicher?
Eine ca. Gleichung n_pixel_height * n_pixel_width * n_channels in Bytes (8-Bit-Annahme für Kanal)

Wenn die Bilder über 10Mb in jpg sind sie zusammengedrückt werden, so bedeutet, dass sie eine große Menge an Speicher nehmen. Speicher auf dieser Art von Geräten ist eine wertvolle und kurze Ressource.
Wenn Ihre App das Speicherlimit überschreitet, wird nach einer Reihe von Callbacks wie didReceiveMemoryWarning, wenn Sie nicht genügend Speicher freigeben, Ihre App getötet.
Immer versuchen Gerät in diesem Fall und nicht auf Simulator, weil der Simulator Ihre Mac-Ressourcen verwenden.
Jetzt, wie man mit großen Bildern umgeht?
Sie können CATiledLayer verwenden, Sie können eine Menge Tutorials online finden. CATiledLayer Wie der Name andeutet, werden Kacheln der Ebene erstellt. Jede Kachel sollte einem Teil Ihres Bildes entsprechen und sie nur dann zeichnen, wenn sie sichtbar sind.
Leider asynchron zeichnet dies bedeutet, dass Ihre Kacheln nicht genau zur gleichen Zeit gezeigt werden können, gibt es eine Strategie, um dieses Problem zu vermeiden, wird in einem Apfel sample code erklärt.
Natürlich gibt es ein Problem, das gelöst werden muss, wie kann ich meine großen Bilder in Kacheln schneiden?
Sie können programmgesteuert vorgehen oder diese bereits als Ressourcen Ihrer Anwendung ausschneiden