Hiển thị GIF động trong iOS


90

Tôi nhận thấy rằng với iMessage, các gif động hiện có thể được gửi và hiển thị. Điều này có nghĩa là Apple hiện đang hỗ trợ hiển thị ảnh GIF động trong một ứng dụng hay là phương pháp đơn giản nhất vẫn là chia hình ảnh trong các khung hình và sau đó hiển thị chúng một cách tuần tự? Cách dễ nhất để hiển thị GIF động kể từ iOS 5.1 là gì?

Cảm ơn!

Câu trả lời:


140

Nếu bạn đang nhắm mục tiêu iOS7 và đã có hình ảnh được chia thành các khung, bạn có thể sử dụng animatedImageNamed:duration:.

Giả sử bạn đang tạo hoạt ảnh cho một con quay. Sao chép tất cả các khung của bạn vào dự án và đặt tên cho chúng như sau:

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

Sau đó, tạo hình ảnh qua:

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

Từ các tài liệu :

Phương thức này tải một loạt tệp bằng cách thêm một loạt số vào tên tệp cơ sở được cung cấp trong tham số tên. Ví dụ: nếu tham số name có nội dung là 'image', thì phương thức này sẽ cố gắng tải hình ảnh từ các tệp có tên 'image0', 'image1', v.v. lên đến 'image1024'. Tất cả các hình ảnh có trong hình ảnh động phải có cùng kích thước và tỷ lệ.


5
Và nếu bạn không có hoạt ảnh trong khung, bạn có thể mở GIF trong ứng dụng Xem trước và chỉ cần kéo các khung ra ngoài. Các khung hình nên được tách ra như .tiff, vì vậy sau đó xem ở đây: maclife.com/article/howtos/...
André Fratelli


38

FLAnimatedImage là một công cụ GIF động mã nguồn mở hiệu quả dành cho iOS:

  • Phát nhiều GIF đồng thời với tốc độ phát lại tương đương với các trình duyệt trên máy tính để bàn
  • Vinh danh độ trễ khung thay đổi
  • Cư xử duyên dáng dưới áp lực bộ nhớ
  • Loại bỏ sự chậm trễ hoặc chặn trong vòng phát lại đầu tiên
  • Diễn giải độ trễ khung hình của ảnh GIF nhanh giống như cách các trình duyệt hiện đại làm

Đó là một thành phần đã được thử nghiệm tốt mà tôi đã viết để cung cấp năng lượng cho tất cả các ảnh GIF trong Flipboard .


thuộc tính khung hiện tại trả về sai vì khung này! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand

12

Một cách thay thế khác là sử dụng a UIWebViewđể hiển thị GIF động. Nếu GIF sẽ được tìm nạp từ một máy chủ, thì thao tác này sẽ đảm nhận việc tìm nạp. Nó cũng hoạt động với GIF cục bộ.


Cảm ơn. Điều này hoạt động tốt. Tuy nhiên, có thể có một số độ trễ trong lần đầu tiên tải gif vào webview, điều này gây ra 'chuyển động chậm' của hoạt ảnh. nếu bạn yêu cầu nó mượt mà hơn, các khung hoạt hình được chia sẻ trong câu trả lời cho câu hỏi này có thể tốt hơn.
Hammer

2
"Bắt đầu từ iOS 8.0 và OS X 10.10, hãy sử dụng WKWebView để thêm nội dung web vào ứng dụng của bạn. Không sử dụng UIWebView hoặc WebView." developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
Sử dụng WebKit để hiển thị GIF giống như mua một con tàu chở hàng để vận chuyển hàng tạp hóa đến nhà của bạn. Chế độ xem web rất tốn kém và yêu cầu khởi tạo JavaScript và công cụ hiển thị đầy đủ. Tôi muốn khuyên bạn nên sử dụng một giải pháp xem hình ảnh
Sirens

8

Từ khung iOS 11 Photos cho phép thêm tính năng phát Gifs động.

Ứng dụng mẫu có thể được tải xuống tại đây

Thông tin thêm về phát lại Gifs động (bắt đầu từ phút 13:35): https://developer.apple.com/videos/play/wwdc2017/505/

nhập mô tả hình ảnh ở đây


hey @sash Ứng dụng mẫu không có lớp "AnimatedImage", có khuôn khổ nào khác mà tôi đang nhập không?
Shabarinath Pabba

@ShabarinathPabba có vẻ như ứng dụng mẫu đã được cập nhật :(
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

Sử dụng bộ nhớ thấp và dễ sử dụng, nhưng phát gif rất chậm
Roman Truba

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.