2010-05-05 28 views
31

मैं एक एनीमेशन एक UIImageViewक्या मैं अंतिम फ्रेम पर UIImageView एनीमेशन रोक सकता हूं?

myAnimatedView.animationImages = myImages; 
myAnimatedView.animationDuration = 1; 
myAnimatedView.animationRepeatCount = 1; 
[myAnimatedView startAnimating]; 

मैं कैसे एनीमेशन के लिए बता सकते हैं का उपयोग कर अंतिम फ्रेम में बंद करने के लिए या छवियों की श्रृंखला के दृश्य अंतिम फ्रेम होना है?

अग्रिम धन्यवाद

उत्तर

6

बाद एनीमेशन खत्म आप अपने एनिमेशन के अंतिम फ़्रेम करने के लिए अपने UIImageView छवि सेट कर सकते हैं।

myAnimatedView.image = [myAnimatedImages objectAtIndex:myAnimatedImages.count - 1] 

मुझे नहीं लगता कि एक प्रतिनिधि विधि है कि आप animationFinish घटना पर सूचित करें ताकि आप एनीमेशन अधिसूचना प्राप्त करने के लिए के रूप में ही की अवधि वाली एक NSTimer शुरू करने की आवश्यकता होगी है।

UIImageViewAnimation documentation

+0

आप वास्तव में 'NSTimer' के बारे में भूल कर सकते हैं:

यहाँ मेरी स्विफ्ट वर्ग है प्रदर्शित होगा। – pix0r

+0

यह वास्तव में आईओएस 4, एफवाईआई पर काम नहीं करता है। वर्कअराउंड को समझने की कोशिश कर रहा है लेकिन मेरा ऐप ठीक काम करता है 3. एनीमेशन की तरह लगता है छवियां अब छवि संपत्ति को साफ़ करती हैं। – typeoneerror

+0

वही है, मेरे आवेदन को अचानक आईओएस 4 के साथ छोटी गाड़ी मिली। और मुझे सही छवि को दोबारा देने के लिए कोई प्रतिनिधि नहीं है। – asandroq

71

UIImageView वर्ग पर छवि संपत्ति निम्नलिखित डॉक्स है: "animationImages संपत्ति शून्य के अलावा अन्य एक मूल्य है, तो इस संपत्ति की सामग्री को उपयोग नहीं किया जाता।"

तो आईओएस 4 में एनीमेशन के आखिरी फ्रेम को पकड़ने की चाल पहली बार छवि संपत्ति को उस अंतिम फ्रेम पर सेट करना है (जबकि एनीमेशन छवियां अभी भी शून्य हैं), फिर एनीमेशन छवियों को सेट करें और स्टार्ट एनीमेटिंग कॉल करें। जब एनीमेशन पूर्ण हो जाता है, तब छवि प्रॉपर्टी प्रदर्शित होती है। कोई कॉलबैक/प्रतिनिधि की आवश्यकता नहीं है।

+26

मैंने आईओएस 5 पर यह कोशिश की है यह काम करता है। मैंने 'animation.image = [myAnimatedView.animationImages lastObject] रखा है; 'ठीक पहले' [myAnimatedView startAnimating]; 'और एनीमेशन आखिरी छवि पर रुक जाता है। – mahboudz

+1

यह उस दस्तावेज से नहीं समझता है; अगर उसने ऐसा कहा तो छवि को असाइन करने से कुछ भी नहीं होगा। दस्तावेज़ गलत हैं - छवि प्रॉपर्टी * * का उपयोग किया जाता है, जबकि छवि एनिमेट नहीं कर रही है। –

+0

बस स्पष्ट करने के लिए: महबौदज़ समाधान पारदर्शी भागों के साथ पीएनजी या जीआईएफ के साथ भी काम करता है। "मुख्य" imageView.image केवल एनीमेशन चलाए जाने के बाद प्रभाव में आता है, और एनीमेशन के दौरान पारदर्शी हिस्सों को "चमक" नहीं देता है (आईओएस 5, 6, 7 पर परीक्षण किया गया है)। – Janosch

13

आप अपने UIImageView उदाहरण में अंतिम फ्रेम की छवि सेट कर सकते हैं और फिर जब एनीमेशन समाप्त हो जाएगा तो अंतिम फ्रेम छवि दिखाई देगी। यहाँ कोड है:

// create your array of images 
NSArray *images = @[[UIImage imageNamed:@"video1.png"], [UIImage imageNamed:@"video2.png"]]; 
UIImageView *imageView = [UIImageView new]; 
imageView.image = images.lastObject; 
imageView.animationImages = images; 
imageView.animationDuration = 1.0; // seconds 
imageView.animationRepeatCount = 1; 
[imageView startAnimating]; 
+0

यदि आप सभी छवियां पीएनजी (पारदर्शी) हैं, तो पृष्ठभूमि छवि स्पष्ट रूप से आप देख सकते हैं कि आप – Amitabha

-1

आप नहीं, जैसे rota.removedOnCompletion = नहीं करने के लिए रोटेशन एनीमेशन का removedOnCompletion गुण सेट है;

उस प्रस्तुति परत को छोड़ देना चाहिए जहां एनीमेशन समाप्त हुआ था। डिफ़ॉल्ट हां है, जो मॉडल मान पर वापस आ जाएगा, यानी, आपके द्वारा वर्णित व्यवहार। fillMode भी सेट किया जाना चाहिए

अर्थात, rota.fillMode = kCAFillModeForwards;

1

मैं सिर्फ एक UIView एनीमेशन UIView की चोटी पर पहली फ्रेम पकड़े टॉस ... छिपा एनीमेशन दृश्य बनाने के लिए और सेट यह अंतिम फ्रेम के रूप में छवि है ... और फिर उन्हें प्रक्रिया के दौरान छिपा गुण स्विच है ।

so... just before your last line... 
// quickly hide the view that only holds the first frame 
myOtherView.hidden = YES; 
// start the animation 
[myAnimatedView startAnimating]; 
// show the animation view 
myAnimatedView.hidden = NO; 
// BAM, done. It will use the last image when it ends. 

कम कोड, अधिक आईबी, जब भी संभव हो।

-1

आप अपनी छवि सरणी में पिछले छवि के लिए UIImageView संपत्ति animateImg.animationDuration = 1

1

मैं UIImageView का एक उपवर्ग बनाने, startAnimating (अधिभावी कर यह उपलब्धि हासिल की है) की स्थापना और छवि संपत्ति की स्थापना द्वारा एनीमेशन बंद कर सकते हैं सुपर कॉल करने से पहले .startAnimating()। एनीमेशन रीपेटकाउंट को 1 सेट करने के अलावा यह वांछित प्रभाव प्राप्त करता है।जब तक आपके छवि एनिमेट जाता है जब तक एनीमेशन समाप्त हो गया है, `animationImages` प्रदर्शित करेगा, तो` छवि -

class SuccessAnimationImageView: UIImageView { 

var duration: NSTimeInterval = 2 

override func didMoveToSuperview() { 
    super.didMoveToSuperview() 
    setupImages() 
} 

override func startAnimating() { 
    setLastFrame() 
    super.startAnimating() 
} 

func setupImages() { 
    animationImages = ImageHelper.successAnimationImages 
    image = animationImages?.first 
    animationRepeatCount = 1 
} 

func setLastFrame() { 
    image = animationImages?.last 
} 
} 
+0

देख सकते हैं, यह महत्वपूर्ण है कि यह कॉल शुरू करने से पहले सेट हो ('''। 'Self.image' * को सेट करने के बाद * कॉलिंग एनीमेटिंग() 'का कोई प्रभाव नहीं पड़ता है। –

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