Visualizza GIF animate in iOS


90

Ho notato che con iMessage ora è possibile inviare e visualizzare gif animate. Ciò significa che Apple ora supporta la visualizzazione di GIF animate in un'applicazione o è ancora il metodo più semplice per dividere l'immagine in frame e quindi mostrarli in sequenza? Qual è il modo più semplice per visualizzare una GIF animata a partire da iOS 5.1?

Grazie!

Risposte:


140

Se stai prendendo di mira iOS7 e hai già l'immagine divisa in frame che puoi utilizzare animatedImageNamed:duration:.

Diciamo che stai animando uno spinner. Copia tutti i tuoi frame nel progetto e dai loro un nome come segue:

  • spinner-1.png
  • spinner-2.png
  • spinner-3.png
  • ecc .

Quindi crea l'immagine tramite:

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

Dai documenti :

Questo metodo carica una serie di file aggiungendo una serie di numeri al nome file di base fornito nel parametro name. Ad esempio, se il parametro name avesse "immagine" come contenuto, questo metodo tenterebbe di caricare immagini da file con i nomi "immagine0", "immagine1" e così via fino a "immagine1024". Tutte le immagini incluse nell'immagine animata devono condividere la stessa dimensione e scala.


5
E se non hai l'animazione in frame, puoi aprire una GIF nell'app Anteprima e trascinare semplicemente i frame fuori. I fotogrammi dovrebbero essere estratti come .tiff, quindi vedi qui: maclife.com/article/howtos/…
André Fratelli


38

FLAnimatedImage è un motore GIF animato open source performante per iOS:

  • Riproduce più GIF contemporaneamente con una velocità di riproduzione paragonabile a quella dei browser desktop
  • Apprezza i ritardi di frame variabili
  • Si comporta con grazia sotto la pressione della memoria
  • Elimina ritardi o blocchi durante il primo ciclo di riproduzione
  • Interpreta i ritardi dei frame delle GIF veloci allo stesso modo dei browser moderni

È un componente ben collaudato che ho scritto per alimentare tutte le GIF in Flipboard .


la proprietà frame corrente sta restituendo sbagliato per questo framework! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand,

12

Un'altra alternativa è usare a UIWebViewper visualizzare la GIF animata. Se la GIF sta per essere recuperata da un server, questo si occupa del recupero. Funziona anche con GIF locali.


Grazie. Funziona bene. Tuttavia, potrebbero esserci dei ritardi la prima volta che gif viene caricata in webview, il che causa il "rallentatore" dell'animazione. se si desidera che sia più fluido, l'animazione dei frame condivisi nella risposta a questa domanda potrebbe essere migliore.
Hammer

2
"A partire da iOS 8.0 e OS X 10.10, usa WKWebView per aggiungere contenuto web alla tua app. Non usare UIWebView o WebView." developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
Usare WebKit per visualizzare una GIF è come acquistare una nave mercantile per trasportare la spesa a casa tua. Le visualizzazioni Web sono molto costose e richiedono l'inizializzazione di un JavaScript completo e di un motore di rendering. Consiglio vivamente di utilizzare una soluzione di visualizzazione delle immagini
Sirene

8

Dal framework Foto di iOS 11 è possibile aggiungere la riproduzione di Gif animate.

L'app di esempio può essere scaricata qui

Maggiori informazioni sulla riproduzione di Gif animate (a partire da 13:35 min): https://developer.apple.com/videos/play/wwdc2017/505/

inserisci qui la descrizione dell'immagine


hey @sash L'app di esempio non ha la classe "AnimatedImage" c'è un altro framework che sto importando?
Shabarinath Pabba

@ShabarinathPabba sembra che l'app di esempio sia stata aggiornata :(
sash

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

Basso utilizzo della memoria e facile da usare, ma riproduce gif molto lentamente
Roman Truba

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.