IOS में एनिमेटेड GIF प्रदर्शित करें


90

मैंने देखा कि iMessage के साथ, एनिमेटेड gifs अब भेजे और प्रदर्शित किए जा सकते हैं। क्या इसका मतलब यह है कि Apple अब किसी एप्लिकेशन में एनिमेटेड GIF के प्रदर्शन का समर्थन कर रहा है, या फ्रेम में छवि को विभाजित करने और फिर क्रमिक रूप से उन्हें दिखाने के लिए अभी भी सबसे आसान तरीका है? IOS 5.1 के रूप में एनिमेटेड GIF प्रदर्शित करने का सबसे आसान तरीका क्या है?

धन्यवाद!

जवाबों:


140

यदि आप iOS7 को टारगेट कर रहे हैं और पहले से ही इमेज को फ्रेम में विभाजित कर चुके हैं तो आप इसका उपयोग कर सकते हैं animatedImageNamed:duration:

मान लीजिए कि आप एक स्पिनर को एनिमेट कर रहे हैं। अपने सभी फ़्रेमों को प्रोजेक्ट में कॉपी करें और उन्हें निम्नानुसार नाम दें:

  • spinner-1.png
  • spinner-2.png
  • spinner-3.png
  • आदि ,

इसके बाद छवि बनाएं:

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

डॉक्स से :

यह विधि नाम पैरामीटर में प्रदान की गई आधार फ़ाइल नाम के लिए संख्याओं की एक श्रृंखला को जोड़कर फाइलों की एक श्रृंखला को लोड करती है। उदाहरण के लिए, यदि नाम पैरामीटर में इसकी सामग्री के रूप में 'छवि' थी, तो यह विधि 'इमेज 0', 'इमेज 1' और इसी तरह 'इमेज 1024' तक सभी तरह की फाइलों को छवियों से लोड करने का प्रयास करेगी। एनिमेटेड छवि में शामिल सभी छवियों को समान आकार और पैमाने साझा करना चाहिए।


5
और यदि आपके पास फ़्रेम में एनीमेशन नहीं है, तो आप पूर्वावलोकन ऐप में जीआईएफ खोल सकते हैं और फ़्रेम को बाहर खींच सकते हैं। फ़्रेम को .tiff के रूप में निकाला जाना चाहिए, इसलिए यहां देखें: maclife.com/article/howtos/…
André Fratelli

38

मैं निम्नलिखित कोड का उपयोग करने की सलाह दूंगा, यह बहुत अधिक हल्का है, और एआरसी और गैर-एआरसी परियोजना के साथ संगत है, यह UIImageView पर एक सरल श्रेणी जोड़ता है:

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


1
यदि आप कई gifs प्रदर्शित करना चाहते हैं तो यह सलाह नहीं देगा, वास्तव में धीमी गति से काम करता है
iago849

3
बहुत उच्च स्मृति उपयोग
रोमन ट्रू

38

FLAnimatedImage iOS के लिए एक खुला स्रोत एनिमेटेड GIF इंजन है:

  • डेस्कटॉप ब्राउज़रों के लिए तुलनीय प्लेबैक गति के साथ एक साथ कई GIF खेलता है
  • ऑनर्स वैरिएबल फ्रेम देरी
  • स्मृति दबाव में शान से व्यवहार करता है
  • पहले प्लेबैक लूप के दौरान देरी या अवरोध को समाप्त करता है
  • जिस तरह से आधुनिक ब्राउज़र करते हैं उसी तरह से तेज GIFs की फ़्रेम देरी की व्याख्या करता है

यह एक अच्छी तरह से परीक्षण किया गया घटक है जो मैंने फ्लिपबोर्ड में सभी जीआईएफ को बिजली देने के लिए लिखा था ।


वर्तमान फ़्रेम प्रॉपर्टी इस फ़्रेम को गलत तरीके से लौटा रही है! github.com/Flipboard/FLAnimatedImage/issues/222
Mo Farhand 8

12

एक अन्य विकल्प UIWebViewएनिमेटेड GIF को प्रदर्शित करने के लिए एक का उपयोग करना है। अगर जीआईएफ किसी सर्वर से प्राप्त किया जा रहा है, तो यह लाने का ख्याल रखता है। यह स्थानीय GIF के साथ भी काम करता है।


धन्यवाद। यह अच्छा काम करता है। हालाँकि, पहली बार जीआईएफ को वेबव्यू में लोड करने के दौरान कुछ अंतराल हो सकता है जो एनीमेशन की 'धीमी गति' का कारण बनता है। अगर आप को इसे स्मूथ बनाने की आवश्यकता है, तो इस सवाल के जवाब में साझा किए गए एनिमेटेड फ्रेम बेहतर हो सकते हैं।
हैमर

2
"IOS 8.0 और OS X 10.10 में शुरू, अपने ऐप में वेब सामग्री जोड़ने के लिए WKWebView का उपयोग करें। UIWebView या WebView का उपयोग न करें।" developer.apple.com/reference/webkit/wkwebview
जेसन मूर

1
एक GIF को प्रदर्शित करने के लिए WebKit का उपयोग करना अपने घर के लिए किराने का सामान लाने के लिए कार्गो जहाज खरीदने जैसा है। वेब दृश्य बहुत महंगे हैं और एक पूर्ण जावास्क्रिप्ट और रेंडरिंग इंजन के आरंभ की आवश्यकता होती है। मैं अत्यधिक एक छवि दृश्य समाधान का उपयोग करना चाहिये था
सायरन

8

से आईओएस 11 तस्वीरें ढांचे एनिमेटेड gifs प्लेबैक जोड़ने के लिए अनुमति देता है।

सैंपल ऐप को यहां लोड किया जा सकता है

एनिमेटेड Gifs प्लेबैक के बारे में अधिक जानकारी (13:35 मिनट से शुरू): https://developer.apple.com/videos/play/wwdc2017/505/

यहां छवि विवरण दर्ज करें


hey @ sash नमूना ऐप में "AnimatedImage" वर्ग नहीं है, क्या कोई अन्य फ्रेमवर्क है जिसे मैं आयात कर रहा हूं?
शबरीनाथ पाब्बा

@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

कम स्मृति उपयोग और उपयोग में आसान है, लेकिन बहुत धीमी गति से खेलता है
रोमन ट्रू

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.