2011-08-05 20 views
6

मैं UIImageView घूर्णन के लिए CABasicAnimation का उपयोग कर रहा हूं और मैं रोके गए एनीमेशन को फिर से शुरू करने में असमर्थ हूं। एनीमेशन viewDidLoad विधि में शुरू होता है:CABasicAnimation को रोकने/फिर से शुरू करने के लिए समाधान कैसे प्राप्त करें?

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]]; 
self.myImage = img; 
[self.view addSubview:img]; 
[img release]; 
CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
fullRotation.fromValue = [NSNumber numberWithFloat:0]; 
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; 
fullRotation.duration = 10; 
fullRotation.repeatCount = LARGE_VAL; 
[img.layer addAnimation:fullRotation forKey:@"360"]; 

मैं बिना रुके repeatable एनीमेशन है कि जब दृश्य स्क्रीन पर दिखाई देता शुरू की आवश्यकता है। तो मैंने इस पोस्ट को पढ़ा है (here) और कार्यान्वित समाधान ने परत एनीमेशन को रोकने और फिर से शुरू करने के लिए अपना सेब (solution) प्रदान किया। तो, मैं इन तरीकों का इस्तेमाल किया है:

-(void)pauseLayer:(CALayer*)layer{ 
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
    layer.speed = 0.0; 
    layer.timeOffset = pausedTime; 
} 

-(void)resumeLayer:(CALayer*)layer{ 
    CFTimeInterval pausedTime = [layer timeOffset]; 
    layer.speed = 1.0; 
    layer.timeOffset = 0.0; 
    layer.beginTime = 0.0; 
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 
    layer.beginTime = timeSincePause; 
} 

और मैं का उपयोग कर और myImage संपत्ति की परत गुजर viewWillAppear और viewWillDisappear करने के लिए इन तरीकों को शामिल किया है:

-(void)viewWillDisappear:(BOOL)animated{ 
    [self pauseLayer:self.myImage.layer]; 
} 

- (void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    [self resumeLayer:self.myImage.layer]; 
} 

छवि जब दृश्य चला जाता है प्रारंभिक रोटेशन है स्क्रीन पर। लेकिन फिर मैं स्क्रीन पर कुछ UIViewController डाल रहा हूं, फिर छवि रोटेशन के साथ दृश्य पर वापस जा रहा हूं। समस्या स्क्रीन पर दिखाई देने पर छवि का घूर्णन फिर से शुरू नहीं होता है। मैंने जांच की है: मेरी छवि UIImageView प्रॉपर्टी शून्य नहीं है, दोनों दृश्य देखें और देखें WillAppear विधियों को लागू किया जाता है। लेकिन एनीमेशन फिर से शुरू नहीं हो रहा है। क्या मैंने कुछ गलत किया, या कुछ याद किया?

उत्तर

6

कामकाज, कामकाज और कामकाज। अब तक, समाधान मैं काम कर गया है/stoping के लिए सुझाव दिया समाधान फेंक शुरू करने परत एनीमेशन :), viewWillDisappear में सभी एनिमेशन दूर करने के लिए है:

[self.myImage.layer removeAllAnimations]; 

और फिर viewWillAppear में एक नई एनीमेशन शुरू करने के लिए। मुझे पता है कि मैं बूढ़े को फिर से शुरू नहीं कर रहा हूं, लेकिन मेरे मामले में, यह मनुष्यों की आंखों के लिए इतना दृश्यमान नहीं है, इसलिए मुझे लगता है कि मैं अच्छा होगा। लेकिन अगर किसी के पास एप्पल द्वारा प्रदान किया गया समाधान काम कर रहा है, तो कृपया साझा करें।

0

मुझे लगता है कि आपकी समस्या स्मृति प्रबंधन है।

ऐसा करें:

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]]; 
self.myImage = img; 
[img release]; 

CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
fullRotation.fromValue = [NSNumber numberWithFloat:0]; 
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; 
fullRotation.duration = 10; 
fullRotation.repeatCount = LARGE_VAL; 
[self.myImage.layer addAnimation:fullRotation forKey:@"360"]; 

[self.view addSubview:self.myImage]; 

मुझे बताओ अगर यह काम करता है।

+0

मैंने अपनी छवि दृश्य वस्तु संपत्ति (दोनों दृश्य और इसकी परत) के भौतिक पते की जांच की है और दृश्य WillAppear और viewWillDisappear दर्ज करते समय पते समान हैं। छवि ऑब्जेक्ट रिलीज़ नहीं होता है, क्योंकि मैंने जांच की है कि यह शून्य – Centurion

+0

नहीं है IImage संपत्ति में nonatomic है और गुण बनाए रखें। इसलिए प्रारंभिक self.myImage = img असाइनमेंट के बाद छवि ऑब्जेक्ट को बनाए रखा जाता है। – Centurion

+0

चल रहा है [self.view addSubview: self.myImage] नीचे समस्या को हल नहीं करता है, एनीमेशन अभी भी वापस आने के बाद फिर से शुरू नहीं होता है। – Centurion

32

मुझे आपके लिए एक ही समस्या थी। बहुत सारे गुगल के बाद ... मुझे इसके लिए एक समाधान मिला। जब आप CABasicAnimation सेट

आपके मामले में, बस नीचे दिए कोड जोड़ें:

fullRotation.removedOnCompletion = NO; 

यह है कि। मुझे उम्मीद है कि यह आपके लिए काम करेगा।

+1

वर्तमान में, पहले से ही ऐपस्टोर पर ऐप है। लेकिन धन्यवाद, निश्चित रूप से समाधान का प्रयास करेगा। – Centurion

+1

यह मेरे लिए –

+1

thnx Younghan काम किया। यह मेरे लिए काम करता है। – ashForIos