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!

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.


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

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 .


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.


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í


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

Bajo uso de memoria y fácil de usar, pero reproduce gif muy lento
Roman Truba

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.