Ich habe eine Anforderung, in der der Benutzer ein gif aus einer Liste von gif-Dateien in der Bibliothek abrufen muss. Ich habe versucht, beide Bilder zu holen. Videos ohne Probleme Aber als ich kUTTypeGIF
als Medium benutzt habe, stürzt es mit einem Fehler ab:
Beenden der App aufgrund einer nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: 'Keine verfügbaren Typen für die Quelle 0 '
Hier ist mein Code:
%Vor% Wie kann ich das lösen? Und wenn kUTTypeGIF
media hier nicht unterstützt wird, wie kann ich die Liste alle gif-Dateien anzeigen, um den Benutzer auszuwählen? Ich muss GIF-Dateien nur im UIImagePickerController
iOS gibt Ihnen keine einfache Möglichkeit, während der Verwendung von UIImagePickerController zu bestimmen, welches Dateiformat für die in der Kamerarolle gespeicherten Bilder verwendet wird. Apples Philosophie hier ist, dass ein Bild als ein UIImage
-Objekt gedacht werden sollte und dass es dir egal sein sollte, was das ultimative Dateiformat ist.
Also, da Sie UIImagePickerController nicht verwenden können, um GIF-Dateien herauszufiltern. Hier ein paar Möglichkeiten für dich:
1)
Sobald Sie ein Bild ausgewählt haben, können Sie bestimmen, um welche Art von Datei es sich handelt. Hier ist eine Beispielfrage, die Sie stellen möchte wie man bestimmt, ob das Bild ein PNG oder JPEG ist . Sobald der Benutzer eine Datei ausgewählt hat, wissen Sie, ob es sich um ein GIF oder ein JPEG oder ein PNG oder ähnliches handelt.
2)
Sie könnten ein beliebiges UIImage in eine GIF
-Datei konvertieren . Hier ist eine Frage, die auf eine Bibliothek verweist, die dazu in der Lage ist um zu helfen .
3)
Sie können über die gesamte Kamerarolle hinweg iterieren und diese Bilder als GIF
files in das Dokumentenverzeichnis Ihrer App konvertieren / speichern. Etwas, das beginnt mit Aufzählung gefunden in dieser verwandten Frage und führt dann jedes Bild durch das ImageIO-Framework, um es in eine gif-Datei zu konvertieren (der Code, auf den ich in Lösung Nr. 2 hingewiesen). Sie können dann Ihre eigenen Picker rollen.
ps. Ihr eigener Code würde nicht funktionieren, weil, wie Nathan anmerkte, gif
kein Medientyp ist. Dies ist eine Funktion, die auf die verfügbaren Medientypen verweist:
Wenn Sie nur Assets aus der Photos-Bibliothek ohne Picker abrufen möchten, können Sie PHFetchResult
verwenden, um das Array von PHAsset
zu erhalten. Unten ist die Liste der verfügbaren MediaType enums
verfügbar in Photos.Framework
:
Sie können es wie folgt verwenden:
%Vor%und fordern Sie ein Bild vom Asset als:
an %Vor%Hoffe das wird dir helfen !!
Tags und Links objective-c ios uiimagepickercontroller