Exibir GIF animado no iOS


90

Percebi que com o iMessage, gifs animados agora podem ser enviados e exibidos. Isso significa que a Apple agora oferece suporte à exibição de GIFs animados em um aplicativo ou o método mais fácil ainda é dividir a imagem em quadros e depois mostrá-los sequencialmente? Qual é a maneira mais fácil de exibir um GIF animado no iOS 5.1?

Obrigado!

Respostas:


140

Se você tem como alvo o iOS7 e já tem a imagem dividida em frames, você pode usar animatedImageNamed:duration:.

Digamos que você esteja animando um spinner. Copie todos os seus quadros no projeto e nomeie-os da seguinte maneira:

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

Em seguida, crie a imagem por meio de:

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

Dos documentos :

Este método carrega uma série de arquivos anexando uma série de números ao nome do arquivo base fornecido no parâmetro name. Por exemplo, se o parâmetro de nome tivesse 'imagem' como seu conteúdo, este método tentaria carregar imagens de arquivos com os nomes 'imagem0', 'imagem1' e assim por diante até 'imagem1024'. Todas as imagens incluídas na imagem animada devem compartilhar o mesmo tamanho e escala.


5
E se você não tiver a animação em quadros, pode abrir um GIF no aplicativo de visualização e apenas arrastar os quadros para fora. Os frames devem ser extraídos como .tiff, então veja aqui: maclife.com/article/howtos/…
André Fratelli


38

FLAnimatedImage é um mecanismo GIF animado de código aberto de alto desempenho para iOS:

  • Reproduz vários GIFs simultaneamente com uma velocidade de reprodução comparável a navegadores de desktop
  • Aceita atrasos de quadro variáveis
  • Comporta-se elegantemente sob pressão de memória
  • Elimina atrasos ou bloqueios durante o primeiro loop de reprodução
  • Interpreta os atrasos de quadro de GIFs rápidos da mesma forma que os navegadores modernos fazem

É um componente testado que escrevi para alimentar todos os GIFs no Flipboard .


a propriedade do quadro atual está retornando errado para este quadro! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand

12

Outra alternativa é usar um UIWebViewpara exibir o GIF animado. Se o GIF for obtido de um servidor, isso cuidará da busca. Também funciona com GIFs locais.


Obrigado. Isso funciona bem. No entanto, pode haver algum atraso na primeira vez que o GIF é carregado no webview, o que causa o 'movimento lento' da animação. se vc quiser que seja mais suave, animar frames compartilhados na resposta a esta pergunta pode ser melhor.
Martelo,

2
"A partir do iOS 8.0 e OS X 10.10, use WKWebView para adicionar conteúdo da web ao seu aplicativo. Não use UIWebView ou WebView." developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
Usar o WebKit para exibir um GIF é como comprar um navio de carga para transportar suas compras até sua casa. As visualizações da Web são muito caras e exigem a inicialização de um mecanismo de renderização e JavaScript completo. Eu recomendo usar uma solução de visualização de imagem
Sirens

8

A partir do iOS 11, a estrutura de fotos permite adicionar a reprodução de Gifs animados.

O aplicativo de amostra pode ser baixado aqui

Mais informações sobre a reprodução de Gifs animados (a partir de 13:35 min): https://developer.apple.com/videos/play/wwdc2017/505/

insira a descrição da imagem aqui


hey @sash O aplicativo de amostra não tem a classe "AnimatedImage". Há outra estrutura que estou importando?
Shabarinath Pabba

@ShabarinathPabba, parece que o aplicativo de amostra foi atualizado :(
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

Baixo uso de memória e fácil de usar, mas reproduz GIF muito devagar
Roman Truba,

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.