Wyświetl animowany GIF w iOS


91

Zauważyłem, że dzięki iMessage można teraz wysyłać i wyświetlać animowane gify. Czy to oznacza, że ​​Apple obsługuje teraz wyświetlanie animowanych plików GIF w aplikacji, czy też najłatwiejszą metodą jest nadal dzielenie obrazu na klatki, a następnie ich sekwencyjne wyświetlanie? Jaki jest najłatwiejszy sposób wyświetlania animowanego GIF-a od iOS 5.1?

Dzięki!

Odpowiedzi:


140

Jeśli celujesz w system iOS7 i masz już obraz podzielony na ramki, których możesz użyć animatedImageNamed:duration:.

Powiedzmy, że animujesz spinner. Skopiuj wszystkie ramki do projektu i nazwij je w następujący sposób:

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

Następnie utwórz obraz za pomocą:

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

Z dokumentów :

Ta metoda ładuje serię plików, dołączając serię liczb do podstawowej nazwy pliku podanej w parametrze name. Na przykład, jeśli parametr name zawierałby „obraz”, ta metoda próbowała załadować obrazy z plików o nazwach „image0”, „image1” itd. Aż do „image1024”. Wszystkie obrazy zawarte w animowanym obrazie powinny mieć ten sam rozmiar i skalę.


5
A jeśli nie masz animacji w ramkach, możesz otworzyć GIF w aplikacji Podgląd i po prostu przeciągnąć klatki na zewnątrz. Ramki powinny być rozpakowane jako .tiff, więc zobacz tutaj: maclife.com/article/howtos/…
André Fratelli


38

FLAnimatedImage to wydajny, animowany silnik GIF typu open source dla systemu iOS:

  • Odtwarza wiele plików GIF jednocześnie z prędkością odtwarzania porównywalną z przeglądarkami komputerowymi
  • Uwzględnia zmienne opóźnienia klatek
  • Zachowuje się wdzięcznie pod presją pamięci
  • Eliminuje opóźnienia lub blokady podczas pierwszej pętli odtwarzania
  • Interpretuje opóźnienia ramek w szybkich plikach GIF w taki sam sposób, jak robią to nowoczesne przeglądarki

To dobrze przetestowany komponent, który napisałem, aby zasilać wszystkie GIF-y w Flipboard .


bieżąca właściwość ramki zwraca nieprawidłowy wynik z tego frameworka! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand

12

Inną alternatywą jest użycie a UIWebViewdo wyświetlenia animowanego GIF-a. Jeśli GIF ma zostać pobrany z serwera, zajmie się pobieraniem. Działa również z lokalnymi plikami GIF.


Dzięki. To działa dobrze. Jednak przy pierwszym ładowaniu gifa do widoku internetowego może wystąpić pewne opóźnienie, co powoduje „zwolnione tempo” animacji. jeśli wymagasz płynniejszego animowania ramek udostępnionych w odpowiedzi na to pytanie, może być lepsze.
Hammer

2
„Począwszy od iOS 8.0 i OS X 10.10, użyj WKWebView, aby dodać zawartość internetową do swojej aplikacji. Nie używaj UIWebView ani WebView.” developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
Używanie WebKit do wyświetlania GIF-a jest jak kupowanie statku towarowego do transportu artykułów spożywczych do domu. Widoki internetowe są bardzo drogie i wymagają zainicjowania pełnego JavaScript i silnika renderującego. Gorąco polecam skorzystanie z rozwiązania do przeglądania obrazów
Syreny

8

Od frameworka iOS 11 Photos umożliwia dodawanie odtwarzania animowanych Gifów.

Przykładową aplikację można pobrać tutaj

Więcej informacji o odtwarzaniu animowanych GIF-ów (od 13:35 min): https://developer.apple.com/videos/play/wwdc2017/505/

wprowadź opis obrazu tutaj


hej @sash Przykładowa aplikacja nie ma klasy „AnimatedImage”. Czy jest inna struktura, którą importuję?
Shabarinath Pabba

@ShabarinathPabba Wygląda na to, że przykładowa aplikacja została zaktualizowana :(
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

Niskie zużycie pamięci i łatwe w użyciu, ale bardzo wolno odtwarza gif
Roman Truba

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.