Tampilkan GIF animasi di iOS

91

Saya perhatikan bahwa dengan iMessage, gif animasi sekarang dapat dikirim dan ditampilkan. Apakah ini berarti Apple sekarang mendukung tampilan GIF animasi dalam sebuah aplikasi, atau apakah metode termudah masih membagi gambar dalam bingkai dan kemudian menampilkannya secara berurutan? Apa cara termudah untuk menampilkan GIF animasi pada iOS 5.1?

Terima kasih!

swickblade
sumber

Jawaban:

140

Jika Anda menargetkan iOS7 dan sudah membagi gambar menjadi beberapa bingkai, Anda dapat menggunakan animatedImageNamed:duration:.

Misalkan Anda menganimasikan pemintal. Salin semua bingkai Anda ke dalam proyek dan beri nama sebagai berikut:

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

Kemudian buat gambar melalui:

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

Dari dokumen :

Metode ini memuat serangkaian file dengan menambahkan serangkaian angka ke nama file dasar yang diberikan dalam parameter name. Misalnya, jika parameter nama memiliki 'gambar' sebagai isinya, metode ini akan mencoba memuat gambar dari file dengan nama 'gambar0', 'gambar1' dan seterusnya hingga 'gambar1024'. Semua gambar yang disertakan dalam gambar animasi harus memiliki ukuran dan skala yang sama.

Joe Masilotti
sumber
5
Dan jika Anda tidak memiliki animasi dalam bingkai, Anda dapat membuka GIF di aplikasi Pratinjau dan menarik bingkai keluar. Bingkai harus diekstraksi sebagai .tiff, jadi lihat di sini: maclife.com/article/howtos/…
André Fratelli
38

Saya akan merekomendasikan menggunakan kode berikut, jauh lebih ringan, dan kompatibel dengan proyek ARC dan non-ARC, ini menambahkan kategori sederhana di UIImageView:

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

Eric
sumber
1
Tidak akan menyarankan jika Anda harus menampilkan banyak gif, bekerja sangat lambat
iago849
3
Penggunaan memori terlalu tinggi
Roman Truba
38

FLAnimatedImage adalah mesin GIF animasi open source yang berkinerja baik untuk iOS:

  • Memutar beberapa GIF secara bersamaan dengan kecepatan pemutaran yang sebanding dengan browser desktop
  • Menghormati penundaan bingkai variabel
  • Berperilaku anggun di bawah tekanan memori
  • Menghilangkan penundaan atau pemblokiran selama loop pemutaran pertama
  • Menafsirkan penundaan bingkai GIF cepat seperti yang dilakukan browser modern

Ini adalah komponen yang telah teruji dengan baik yang saya tulis untuk memberi daya pada semua GIF di Flipboard .

Raphael Schaad
sumber
properti frame saat ini mengembalikan salah dari kerangka ini! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand
12

Alternatif lain adalah menggunakan a UIWebViewuntuk menampilkan GIF animasi. Jika GIF akan diambil dari server, maka ini menangani pengambilan. Ini juga berfungsi dengan GIF lokal.

ThomasW
sumber
Terima kasih. Ini bekerja dengan baik. Namun, mungkin ada sedikit keterlambatan saat gif pertama kali dimuat ke tampilan web yang menyebabkan 'gerakan lambat' pada animasi. jika Anda membutuhkannya agar lebih halus, bingkai animasi yang dibagikan dalam jawaban untuk pertanyaan ini mungkin lebih baik.
Palu
2
"Mulai iOS 8.0 dan OS X 10.10, gunakan WKWebView untuk menambahkan konten web ke aplikasi Anda. Jangan gunakan UIWebView atau WebView." developer.apple.com/reference/webkit/wkwebview
Jason Moore
1
Menggunakan WebKit untuk menampilkan GIF seperti membeli kapal kargo untuk mengangkut bahan makanan ke rumah Anda. Tampilan web sangat mahal dan membutuhkan inisialisasi JavaScript lengkap dan mesin rendering. Saya sangat merekomendasikan menggunakan solusi tampilan gambar
Sirene
8

Dari kerangka iOS 11 Foto memungkinkan untuk menambahkan pemutaran Gifs animasi.

Aplikasi sampel dapat diunduh di sini

Info selengkapnya tentang pemutaran animasi Gif (mulai dari 13:35 menit): https://developer.apple.com/videos/play/wwdc2017/505/

masukkan deskripsi gambar di sini

selempang
sumber
hey @sash Aplikasi contoh tidak memiliki kelas "AnimatedImage", apakah ada kerangka kerja lain yang saya impor?
Shabarinath Pabba
@ShabarinathPabba tampaknya aplikasi sampel diperbarui :(
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
sumber
Penggunaan memori rendah dan mudah digunakan, tetapi memainkan gif sangat lambat
Roman Truba
2

Anda dapat menggunakan SwiftGif dari tautan ini

Pemakaian:

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