Mostrar GIF animado en iOS

90

Noté que con iMessage, los gifs animados ahora se pueden enviar y mostrar. ¿Significa esto que Apple ahora admite la visualización de GIF animados en una aplicación, o el método más sencillo sigue siendo dividir la imagen en fotogramas y luego mostrarlos secuencialmente? ¿Cuál es la forma más sencilla de mostrar un GIF animado a partir de iOS 5.1?

¡Gracias!

swickblade
fuente

Respuestas:

140

Si tiene como objetivo iOS7 y ya tiene la imagen dividida en marcos, puede usarla animatedImageNamed:duration:.

Digamos que estás animando una ruleta. Copie todos sus marcos en el proyecto y nómbrelos de la siguiente manera:

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

Luego crea la imagen a través de:

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

De los documentos :

Este método carga una serie de archivos agregando una serie de números al nombre del archivo base proporcionado en el parámetro de nombre. Por ejemplo, si el parámetro de nombre tuviera 'imagen' como contenido, este método intentaría cargar imágenes desde archivos con los nombres 'imagen0', 'imagen1' y así sucesivamente hasta 'imagen1024'. Todas las imágenes incluidas en la imagen animada deben compartir el mismo tamaño y escala.

Joe Masilotti
fuente
5
Y si no tiene la animación en cuadros, puede abrir un GIF en la aplicación Vista previa y simplemente arrastrar los cuadros hacia afuera. Los marcos deben extraerse como .tiff, así que consulte aquí: maclife.com/article/howtos/…
André Fratelli
38

Recomendaría usar el siguiente código, es mucho más liviano y compatible con proyectos ARC y no ARC, agrega una categoría simple en UIImageView:

https://github.com/mayoff/uiimage-from-animated-gif/

Eric
fuente
1
No lo recomendaría si tiene que mostrar varios gifs, funciona muy lento
iago849
3
Uso de memoria demasiado alto
Roman Truba
38

FLAnimatedImage es un motor GIF animado de código abierto de alto rendimiento para iOS:

  • Reproduce varios GIF simultáneamente con una velocidad de reproducción comparable a la de los navegadores de escritorio
  • Honra retrasos de tramas variables
  • Se comporta con gracia bajo la presión de la memoria.
  • Elimina retrasos o bloqueos durante el primer bucle de reproducción
  • Interpreta los retrasos de fotogramas de los GIF rápidos de la misma manera que lo hacen los navegadores modernos

Es un componente bien probado que escribí para alimentar todos los GIF en Flipboard .

Raphael Schaad
fuente
la propiedad del marco actual está regresando mal para este marco. github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand
12

Otra alternativa es utilizar a UIWebViewpara mostrar el GIF animado. Si el GIF se va a recuperar de un servidor, este se encarga de la recuperación. También funciona con GIF locales.

ThomasW
fuente
Gracias. Esto funciona bien. Sin embargo, puede haber algunos retrasos la primera vez que se carga un gif en la vista web, lo que provoca la "cámara lenta" de la animación. Si necesita que sea más fluido, podría ser mejor animar los fotogramas que se comparten en la respuesta a esta pregunta.
Martillo
2
"A partir de iOS 8.0 y OS X 10.10, use WKWebView para agregar contenido web a su aplicación. No use UIWebView o WebView". developer.apple.com/reference/webkit/wkwebview
Jason Moore
1
Usar WebKit para mostrar un GIF es como comprar un barco de carga para transportar sus alimentos a su casa. Las vistas web son muy caras y requieren la inicialización de un motor de representación y JavaScript completo. Recomiendo encarecidamente utilizar una solución de visualización de imágenes
Sirens
8

Desde iOS 11, el marco de fotos permite agregar reproducción de GIF animados.

La aplicación de muestra se puede descargar aquí

Más información sobre la reproducción de GIF animados (a partir de las 13:35 min): https://developer.apple.com/videos/play/wwdc2017/505/

ingrese la descripción de la imagen aquí

faja
fuente
hey @sash La aplicación de muestra no tiene la clase "AnimatedImage" ¿Hay otro marco que estoy importando?
Shabarinath Pabba
@ShabarinathPabba parece que la aplicación de muestra se actualizó :(
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
Erik Holley
fuente
Bajo uso de memoria y fácil de usar, pero reproduce gif muy lento
Roman Truba
1

Puede usar SwiftGif desde este enlace

Uso:

imageView.loadGif(name: "jeremy")
david72
fuente