แสดง GIF แบบเคลื่อนไหวใน iOS


91

ฉันสังเกตว่าด้วย iMessage ตอนนี้สามารถส่งและแสดง gif แบบเคลื่อนไหวได้ นั่นหมายความว่าตอนนี้ Apple รองรับการแสดง GIF แบบเคลื่อนไหวในแอปพลิเคชั่นแล้วหรือยังเป็นวิธีที่ง่ายที่สุดในการแบ่งรูปภาพเป็นเฟรมแล้วแสดงตามลำดับ วิธีที่ง่ายที่สุดในการแสดง GIF แบบเคลื่อนไหวใน iOS 5.1 คืออะไร?

ขอบคุณ!

คำตอบ:


140

หากคุณกำหนดเป้าหมายเป็น iOS7 และมีภาพที่แบ่งออกเป็นเฟรมแล้วคุณสามารถanimatedImageNamed:duration:ใช้ได้

สมมติว่าคุณกำลังทำให้สปินเนอร์เคลื่อนไหว คัดลอกเฟรมทั้งหมดของคุณลงในโปรเจ็กต์และตั้งชื่อดังต่อไปนี้:

  • spinner-1.png
  • spinner-2.png
  • spinner-3.png
  • ฯลฯ ,

จากนั้นสร้างภาพผ่าน:

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

จากเอกสาร :

วิธีนี้จะโหลดชุดไฟล์โดยการต่อท้ายชุดตัวเลขเข้ากับชื่อไฟล์ฐานที่ให้ไว้ในพารามิเตอร์ name ตัวอย่างเช่นหากพารามิเตอร์ name มี 'image' เป็นเนื้อหาวิธีนี้จะพยายามโหลดรูปภาพจากไฟล์ที่มีชื่อ 'image0', 'image1' และอื่น ๆ จนถึง 'image1024' ภาพทั้งหมดที่รวมอยู่ในภาพเคลื่อนไหวควรมีขนาดและมาตราส่วนเดียวกัน


5
และถ้าคุณไม่มีภาพเคลื่อนไหวเป็นเฟรมคุณสามารถเปิด GIF ในแอพ Preview แล้วลากเฟรมออก ควรแยกเฟรมเป็น. tiff ดังนั้นดูที่นี่: maclife.com/article/howtos/…
André Fratelli

38

ฉันขอแนะนำให้ใช้รหัสต่อไปนี้มีน้ำหนักเบากว่ามากและเข้ากันได้กับโครงการ ARC และไม่ใช่ ARC เพิ่มหมวดหมู่ง่ายๆใน UIImageView:

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


1
จะไม่แนะนำถ้าคุณต้องแสดง gif หลาย ๆ ไฟล์ทำงานได้ช้ามาก
iago849

3
ใช้หน่วยความจำสูงเกินไป
Roman Truba

38

FLAnimateImageเป็นเอ็นจิ้น GIF แบบเคลื่อนไหวแบบโอเพนซอร์สสำหรับ iOS:

  • เล่น GIF หลาย ๆ ไฟล์พร้อมกันด้วยความเร็วในการเล่นที่เทียบเท่ากับเบราว์เซอร์บนเดสก์ท็อป
  • ความล่าช้าของเฟรมตัวแปร
  • ทำตัวสง่างามภายใต้แรงกดดันจากความทรงจำ
  • ขจัดความล่าช้าหรือการปิดกั้นระหว่างการเล่นรอบแรก
  • ตีความความล่าช้าของเฟรมของ GIF ที่รวดเร็วแบบเดียวกับที่เบราว์เซอร์สมัยใหม่ทำ

มันเป็นองค์ประกอบที่ดีผ่านการทดสอบที่ผมเขียนถึงอำนาจ GIFs ทั้งหมดใน Flipboard


คุณสมบัติเฟรมปัจจุบันส่งคืนผิดจากกรอบนี้! github.com/Flipboard/FLAnimateImage/issues/222
Mo Farhand

12

อีกทางเลือกหนึ่งคือการใช้UIWebViewเพื่อแสดง GIF แบบเคลื่อนไหว หากกำลังจะดึง GIF จากเซิร์ฟเวอร์สิ่งนี้จะดูแลการดึงข้อมูล นอกจากนี้ยังใช้งานได้กับ GIF ในเครื่อง


ขอบคุณ. ใช้งานได้ดี อย่างไรก็ตามอาจมีความล่าช้าบ้างในครั้งแรกที่โหลด gif ลงใน webview ซึ่งทำให้เกิด 'การเคลื่อนไหวช้า' ของภาพเคลื่อนไหว หากคุณต้องการให้มันราบรื่นขึ้นเฟรมภาพเคลื่อนไหวที่แชร์ในคำตอบสำหรับคำถามนี้อาจจะดีกว่า
Hammer

2
"ตั้งแต่ iOS 8.0 และ OS X 10.10 ให้ใช้ WKWebView เพื่อเพิ่มเนื้อหาเว็บในแอปของคุณอย่าใช้ UIWebView หรือ WebView" developer.apple.com/reference/webkit/wkwebview
Jason Moore

1
การใช้ WebKit เพื่อแสดง GIF ก็เหมือนกับการซื้อเรือบรรทุกสินค้าเพื่อขนส่งของชำไปที่บ้านของคุณ การดูเว็บมีราคาแพงมากและต้องการการเริ่มต้นของ JavaScript และเอ็นจิ้นการเรนเดอร์เต็มรูปแบบ ฉันขอแนะนำให้ใช้โซลูชันการดูภาพ
ไซเรน

8

จากกรอบรูปiOS 11อนุญาตให้เพิ่มการเล่น Gif แบบเคลื่อนไหวได้

สามารถดาวน์โหลดแอปตัวอย่างได้ที่นี่

ข้อมูลเพิ่มเติมเกี่ยวกับการเล่น Gif แบบเคลื่อนไหว (เริ่มตั้งแต่ 13:35 นาที): https://developer.apple.com/videos/play/wwdc2017/505/

ป้อนคำอธิบายภาพที่นี่


เฮ้ @sash แอปตัวอย่างไม่มีคลาส "AnimatedImage" มีกรอบงานอื่นที่ฉันกำลังนำเข้าอยู่หรือไม่?
Shabarinath Pabba

@ShabarinathPabba ดูเหมือนว่าแอปตัวอย่างได้รับการอัปเดตแล้ว :(
สายสะพาย

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

ใช้หน่วยความจำน้อยและใช้งานง่าย แต่เล่น gif ช้ามาก
Roman Truba

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.