Zeigen Sie animiertes GIF in iOS an


90

Mir ist aufgefallen, dass mit iMessage jetzt animierte Gifs gesendet und angezeigt werden können. Bedeutet dies, dass Apple jetzt die Anzeige animierter GIFs in einer Anwendung unterstützt, oder ist es immer noch die einfachste Methode, das Bild in Frames aufzuteilen und diese dann nacheinander anzuzeigen? Was ist der einfachste Weg, um ein animiertes GIF ab iOS 5.1 anzuzeigen?

Vielen Dank!

Antworten:


140

Wenn Sie auf iOS7 abzielen und das Bild bereits in Frames aufgeteilt haben, können Sie es verwenden animatedImageNamed:duration:.

Angenommen, Sie animieren einen Spinner. Kopieren Sie alle Ihre Frames in das Projekt und benennen Sie sie wie folgt:

  • spinner-1.png
  • spinner-2.png
  • spinner-3.png
  • usw. ,

Dann erstellen Sie das Bild über:

[UIImage animatedImageNamed:@"spinner-" duration:1.0f];

Aus den Dokumenten :

Diese Methode lädt eine Reihe von Dateien, indem eine Reihe von Zahlen an den im Parameter name angegebenen Basisdateinamen angehängt wird. Wenn der Parameter name beispielsweise "image" als Inhalt enthält, versucht diese Methode, Bilder aus Dateien mit den Namen "image0", "image1" usw. bis zu "image1024" zu laden. Alle im animierten Bild enthaltenen Bilder sollten dieselbe Größe und denselben Maßstab haben.


5
Und wenn Sie die Animation nicht in Frames haben, können Sie ein GIF in der Vorschau-App öffnen und die Frames einfach herausziehen. Die Frames sollten als .tiff extrahiert werden, also siehe hier: maclife.com/article/howtos/…
André Fratelli


38

FLAnimatedImage ist eine performante animierte Open Source-GIF-Engine für iOS:

  • Spielt mehrere GIFs gleichzeitig mit einer Wiedergabegeschwindigkeit ab, die mit Desktop-Browsern vergleichbar ist
  • Berücksichtigt variable Frame-Verzögerungen
  • Benimmt sich anmutig unter Gedächtnisdruck
  • Beseitigt Verzögerungen oder Blockierungen während der ersten Wiedergabeschleife
  • Interpretiert die Frame-Verzögerungen schneller GIFs genauso wie moderne Browser

Es ist eine gut getestete Komponente, die ich geschrieben habe, um alle GIFs in Flipboard mit Strom zu versorgen .


Die aktuelle Frame-Eigenschaft gibt für dieses Framework falsch zurück! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand

12

Eine andere Alternative ist die Verwendung von a UIWebView, um das animierte GIF anzuzeigen. Wenn das GIF von einem Server abgerufen werden soll, wird das Abrufen erledigt. Es funktioniert auch mit lokalen GIFs.


Vielen Dank. Das funktioniert gut. Beim ersten Laden von GIF in die Webansicht kann es jedoch zu Verzögerungen kommen, die die Zeitlupe der Animation verursachen. Wenn Sie möchten, dass es flüssiger ist, ist es möglicherweise besser, Frames zu animieren, die in der Antwort auf diese Frage geteilt werden.
Hammer

2
"Verwenden Sie ab iOS 8.0 und OS X 10.10 WKWebView, um Ihrer App Webinhalte hinzuzufügen. Verwenden Sie nicht UIWebView oder WebView." developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
Die Verwendung von WebKit zur Anzeige eines GIF ist wie der Kauf eines Frachtschiffs, um Ihre Lebensmittel zu Ihrem Haus zu transportieren. Webansichten sind sehr, sehr teuer und erfordern die Initialisierung einer vollständigen JavaScript- und Rendering-Engine. Ich würde wärmstens empfehlen, eine Bildansichtslösung zu verwenden
Sirenen

8

Ab iOS 11 ermöglicht das Fotos-Framework das Hinzufügen einer animierten Gifs-Wiedergabe.

Beispiel-App kann hier heruntergeladen werden

Weitere Informationen zur animierten Gifs-Wiedergabe (ab 13:35 Minuten): https://developer.apple.com/videos/play/wwdc2017/505/

Geben Sie hier die Bildbeschreibung ein


hey @sash Die Beispiel-App hat keine "AnimatedImage" -Klasse. Gibt es ein anderes Framework, das ich importiere?
Shabarinath Pabba

@ShabarinathPabba es sieht so aus, als ob die Beispiel-App aktualisiert wurde :(
Schärpe

7
#import <QuickLook/QuickLook.h>
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    QLPreviewController *preview = [[QLPreviewController alloc] init];
    preview.dataSource = self;

    [self addChildViewController:preview];
    [self.view addSubview:preview.view];
}

#pragma mark - QLPreviewControllerDataSource

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController
{
    return 1;
}

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{
    NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"myanimated.gif" ofType:nil]];
    return fileURL;
}

@end

Geringe Speichernutzung und einfach zu bedienen, spielt aber
GIF

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.