İOS'ta hareketli GIF görüntüle


91

İMessage ile animasyonlu gif'lerin artık gönderilebildiğini ve görüntülenebildiğini fark ettim. Bu, Apple'ın artık bir uygulamada animasyonlu GIF'lerin görüntülenmesini desteklediği anlamına mı geliyor yoksa görüntüyü karelere bölmek ve ardından sırayla göstermek hala en kolay yöntem mi? İOS 5.1'den itibaren animasyonlu bir GIF görüntülemenin en kolay yolu nedir?

Teşekkürler!

Yanıtlar:


140

İOS7'yi hedefliyorsanız ve görüntüyü zaten çerçevelere ayırmışsanız kullanabilirsiniz animatedImageNamed:duration:.

Diyelim ki bir çarkı canlandırıyorsunuz. Tüm çerçevelerinizi projeye kopyalayın ve aşağıdaki gibi adlandırın:

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

Ardından görüntüyü şu yolla oluşturun:

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

Dokümanlardan :

Bu yöntem, ad parametresinde sağlanan temel dosya adına bir dizi sayı ekleyerek bir dizi dosya yükler. Örneğin, ad parametresinin içeriği olarak 'görüntü' varsa, bu yöntem 'görüntü0', 'görüntü1' vb. Adlara sahip dosyalardan görüntüleri 'görüntü1024'e kadar yüklemeye çalışır. Animasyonlu görselde yer alan tüm görseller aynı boyut ve ölçekte paylaşmalıdır.


5
Karelerde animasyon yoksa, Önizleme uygulamasında bir GIF açabilir ve kareleri dışarı doğru sürükleyebilirsiniz. Çerçeveler .tiff olarak çıkarılmalıdır, bu yüzden buraya bakın: maclife.com/article/howtos/…
André Fratelli


38

FLAnimatedImage , iOS için yüksek performanslı bir açık kaynak animasyonlu GIF motorudur:

  • Masaüstü tarayıcılarla karşılaştırılabilir bir oynatma hızıyla aynı anda birden fazla GIF oynatır
  • Değişken çerçeve gecikmelerini destekler
  • Hafıza baskısı altında zarif davranır
  • İlk oynatma döngüsü sırasında gecikmeleri veya engellemeyi ortadan kaldırır
  • Hızlı GIF'lerin kare gecikmelerini modern tarayıcıların yaptığı gibi yorumlar

Flipboard'daki tüm GIF'leri güçlendirmek için yazdığım iyi test edilmiş bir bileşen .


geçerli çerçeve özelliği bu çerçeveden yanlış dönüyor! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand

12

Diğer bir alternatif, UIWebViewanimasyonlu GIF'i görüntülemek için a kullanmaktır . GIF bir sunucudan getirilecekse, bu, getirmeyi halleder. Aynı zamanda yerel GIF'lerle de çalışır.


Teşekkürler. Bu iyi çalışıyor. Bununla birlikte, gif ilk kez web görünümüne yüklendiğinde, animasyonun 'ağır çekimine' neden olan bir miktar gecikme olabilir. daha pürüzsüz olmasını istiyorsanız, bu sorunun cevabında paylaşılan kareleri canlandırmak daha iyi olabilir.
Hammer

2
"İOS 8.0 ve OS X 10.10'dan itibaren, uygulamanıza web içeriği eklemek için WKWebView kullanın. UIWebView veya WebView kullanmayın." developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
Bir GIF görüntülemek için WebKit kullanmak, yiyeceklerinizi evinize taşımak için bir kargo gemisi satın almaya benzer. Web görünümleri çok çok pahalıdır ve tam bir JavaScript ve işleme motorunun başlatılmasını gerektirir. Bir resim görüntüleme çözümü kullanmanızı şiddetle tavsiye ederim
Sirens

8

Gönderen iOS 11 Fotoğraflar çerçevesi animasyonlu Gifler oynatmayı eklemenize izin verir.

Numune uygulama dowloaded edilebilir burada

Hareketli Gif oynatma hakkında daha fazla bilgi (13:35 dakikadan başlayarak): https://developer.apple.com/videos/play/wwdc2017/505/

görüntü açıklamasını buraya girin


hey @sash Örnek uygulamada "AnimatedImage" sınıfı yok İçe aktardığım başka bir çerçeve var mı?
Shabarinath Pabba

@ShabarinathPabba, örnek uygulamanın güncellendiği görülüyor :(
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

Düşük bellek kullanımı ve kullanımı kolay, ancak
gif'i

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.