2013-12-11 9 views
5

जब कोई उपयोगकर्ता जीआईएफ का चयन करता है, तो मैं जीआईएफ दिखाते हुए सब कुछ के ऊपर एक ओवरले प्रस्तुत करना चाहता हूं।किसी निश्चित फ्रेम में आईओएस पर एक जीआईएफ कैसे दिखाया जाए, इसे पूरी तरह से लोड होने तक दिखाएं, और ज़ूम की अनुमति दें?

मुझे पता है कि ऐसा करने के लिए आईओएस पर कुछ तरीके हैं। महान UIImage+animatedGIF है जो कि अच्छी तरह से काम करता है, लेकिन लंबे समय तक जीआईएफ के लिए वे बहुत धीमे होते हैं और UIWebView (जो सटीक प्लेबैक गति पर खेलता है) के समान गति से वापस नहीं खेलते हैं।

यह बेकार है, क्योंकि अगर वह श्रेणी धीरे-धीरे उन्हें वापस नहीं खेलती है तो यह सब कुछ मुझे चाहिए।

लेकिन यह नहीं है, इसलिए मैं UIWebView के साथ करने की कोशिश की है, लेकिन मैं तीन बातें लेकर संदेह में हूँ:

  1. मैं आकार कि UIWebView जब (अपने फ्रेम) प्रस्तुत किया जाना चाहिए कैसे मिलता है? क्या मुझे पहले यूआईएममेज के रूप में जीआईएफ डाउनलोड करना होगा, फिर इसकी size संपत्ति देखें? क्या कोई बेहतर तरीका है (थोड़ी देर लग सकता है)?

  2. इसे पूरी तरह से लोड होने तक मैं इसे खेलने से कैसे रोकूं?

  3. उपर्युक्त श्रेणी के साथ, क्योंकि यह केवल एक यूआईएममेज है, जब मैं इसे स्क्रॉलव्यू में UIImageView के रूप में एम्बेड करता हूं तो ज़ूम इन और आउट करना बहुत आसान होता है। क्या यह UIWebview के साथ संभव है?

उत्तर

2

1.

पहला समाधान जो मन में आता रंग साफ करने और सही स्थान में रखें के बाद यह लोड खत्म करने के लिए वेब दृश्य की पृष्ठभूमि सेट करने के लिए है। आमतौर पर मैं

[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"]

का उपयोग लेकिन यह है कि अगर आप एक gif यूआरएल के लिए अपने वेब दृश्य का निर्देशन कर रहे हैं काम नहीं करेगा।

2.

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    webView.alpha = 1; 
} 

इस तरह UIWebView उपयोगकर्ता के बाद ही gif पूरा लोड होने के लिए दिखाया जाएगा।

3.

[webView setScalesPageToFit:YES]; 
+1

+1 # 1 के लिए जाँच, एक सरल वेब पेज बना सकते हैं और सादा .gif के बजाय कि करने के लिए वेब दृश्य इशारा करते हैं। – Caleb

1

ओवरले आप को दिखाने के लिए कोशिश कर रहे हैं जहां छवि मध्यम पर सेट और लदान के प्रकार आप प्राप्त करने के लिए कोशिश कर रहे हैं द्वारा पहचानने में एक मंद पृष्ठभूमि की तरह कुछ है। मैं एक छवि दृश्य, एक वेब दृश्य और एक गतिविधि संकेतक या लोडिंग दिखाने के लिए कुछ के साथ एक UIView का उपयोग करेंगे।

उपयोगकर्ता gif दबाता है, तो आप UIView को UIImage दृश्य के साथ काले रंग के पृष्ठभूमि रंग (उदाहरण के लिए) के साथ दिखाते हैं और एक निश्चित अल्फा (0.7) के साथ जो मंद पृष्ठभूमि होगी, आपको गतिविधि संकेतक को भी दिखाना चाहिए , और सुनिश्चित करें कि वेब दृश्य छिपा हुआ है।

एक बार वेब दृश्य लोड हो रहा है और "webViewDidFinishLoad:" का उपयोग कर समाप्त हो गया है प्रतिनिधि विधि, आप अपने आकार पाने और देखने के अंदर उसके अनुसार समायोजित कर सकते हैं, तो कोई करने वेबव्यू छिपा हुआ गुण सेट (और छिपाने के लिए भूल जाते हैं न गतिविधि संकेतक भी)।

यदि हां, वेबपेज के अनुसार बदल जाता है और उपयोगकर्ता में ज़ूम कर सकते हैं और ज़ूम:

UIWebView से "@property (nonatomic) BOOL scalesPageToFit" ज़ूम करने के लिए सक्षम किया जा रहा उपयोगकर्ता को नियंत्रित करता है बाहर। यदि नहीं, उपयोगकर्ता ज़ूमिंग अक्षम है। यह डिफ़ॉल्ट मान नहीं है।

साथ ही, आपको gif (एक आप gif काम करेंगे चयन करने के लिए उपयोगकर्ता को दिखाने के लिए उपयोग कर रहे हैं) के पूर्वावलोकन के साथ एक दूसरे UIImage दृश्य दिखाने के लिए चाहते हो सकता है तो बस छवि दृश्य छिपाने के लिए और वेब दृश्य दिखाने जब gif प्रदर्शित होने के लिए तैयार है।

1

मैं OLImageView का उपयोग करने का सुझाव दूंगा। इसमें सटीक प्लेबैक है।

यह वृद्धिशील लोडिंग का भी समर्थन करता है ताकि आप जितनी जल्दी हो सके फ्रेम को जानेंगे।

+ (instancetype)imageWithIncrementalData:(NSData *)data;

इसके अलावा, आप सिर्फ stopAnimating फोन करके एनीमेशन रोक सकते हैं।

ओवरले के लिए, आप MyGifContainerView बना सकते हैं जिसमें OLImageView और MyOverlayView दोनों शामिल हैं, करना आसान होना चाहिए।

2

आप SDWebImage उपयोग कर सकते हैं यह एनिमेटेड GIF समर्थन

https://github.com/rs/SDWebImage/blob/master/SDWebImage/UIImage%2BGIF.m

 _block BOOL flag = NO; 
     NSURL *imageURL = [NSURL URLWithString:@"ImageUrl" relativeToURL:@"mainURL"] ; 
     SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
     [manager downloadWithURL:imageURL 
         options:0 
         progress:^(NSUInteger receivedSize, long long expectedSize) 
     { 
     } 
         completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
     { 
      if (image){ 
       flag = YES; 
       downloadProgress++; 
      } 
     }]; 
+0

उदाहरण प्रोजेक्ट भी खुल जाएगा नहीं। –

1

आप की जाँच यह hacky की UIScrollView

webview.scrollView.frame 

तरह है, लेकिन यह आम तौर पर द्वारा एक UIWebView का आकार प्राप्त कर सकते हैं वेब व्यू के अंदर सामग्री का आकार प्राप्त करने के लिए मेरे लिए काम करता है।

तो यह प्रतिनिधि का उपयोग करके लोड होने के रूप में शा सुझाव

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
... Show Web View 
} 
संबंधित मुद्दे

 संबंधित मुद्दे