2011-04-24 20 views
5

खारिज मैं सिर्फ 4.3.2 के लिए आईओएस 4.2.1 से अपने iPhone 4 के लिए उन्नत, और XCode 4.0.2 करने के लिए काम करना बंद कर, और मैं UIView एनिमेशन के साथ कुछ विचित्र समस्या आ रहा हूँ। जब मैं पहली बार मेरी एप्लिकेशन लॉन्च, इस तरह कोड पूरी तरह से कार्यान्वित:UIView एनिमेशन के बाद मॉडल देखें

 [UIView beginAnimations:@"fadeAlphaIn" context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    viewClue.alpha = 1.0f; 
    [UIView commitAnimations]; 

लेकिन फिर भी, एक पेश नकारने और फिर मानक विधि द्वारा एक मॉडल दृश्य खारिज करने के बाद:

[self presentModalViewController:more animated:YES]; 

और

[self dismissModalViewControllerAnimated:YES]; 

पहली एनीमेशन अब काम नहीं करता है। उदाहरण के लिए, लुप्त होने के बजाय, व्यूक्लू व्यू बस अल्फा = 0 से अल्फा = 1 तक कूदता है। इसी प्रकार, अन्य दृश्यों को अन्य दृश्यों की फ्रेम संपत्ति में बदलने के लिए फ्रेम को केवल एनीमेशन के बिना प्रारंभिक से अंतिम मूल्य तक कूदने के लिए मजबूर किया जाता है। मोडल दृश्य प्रस्तुत किए जाने और खारिज करने से पहले ये एनिमेशन ठीक काम करते थे।

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

आपकी मदद के लिए धन्यवाद,

जेम्स

संपादित करें: कुछ और कोड दिखा कैसे एप्लिकेशन के नक्शे एनिमेटेड है

-(void) viewMapfunc 
{ 
    AudioServicesPlaySystemSound(soundID); 
    if(mapvisible){ 
     [UIView animateWithDuration:0.5 
           delay:0.1 
          options:UIViewAnimationOptionAllowUserInteraction 
         animations:^{ 
          map.frame = CGRectMake(0, 350, 320, 27); 
          mapscroll.frame = CGRectMake(0, 27, 320, 0); 
         } 
         completion:nil]; 

     mapvisible = NO; 
     viewMapLabel.text = @"View Map"; 
    }else { 
     [UIView animateWithDuration:0.5 
           delay:0.1 
          options:UIViewAnimationOptionAllowUserInteraction 
         animations:^{ 
          map.frame = CGRectMake(0, 50, 320, 300); 
          mapscroll.frame = CGRectMake(0, 27, 320, 300); 
         } 
         completion:nil]; 
     mapvisible = YES; 
     viewMapLabel.text = @"Hide Map"; 
    } 
} 
+0

यकीन है कि w/ओ एक डिबगर संलग्न आप डिवाइस पर इस मुद्दे किया है। मैंने एलेक्सैंडर उत्तर के लिए धन्यवाद सिम्युलेटर –

उत्तर

0

अंत में हो सकता है, मैं सिर्फ सभी मॉडल दृश्य निकाले गए और उन्हें अन्य तरीकों से लागू। कुछ कारणों से, मोडल दृश्यों का उपयोग करके एनिमेशन को गड़बड़ कर दिया गया। कोई समझ नहीं आता है, लेकिन उन्हें हटाने से समस्या ठीक हो गई है। किसी को भी मुझे यह क्यों हो रहा है के रूप में प्रबुद्ध सकते हैं, यह स्मृति चिंताओं के लिए अच्छा हो सकता है ...

+6

क्या किसी को पता चला है कि ऐसा क्यों होता है? –

2

कोशिश दो बातों की जांच करने के लिए:

  • Do आप सभी शुरू एनीमेशन प्रतिबद्ध करते हैं? उनमें से एक को नहीं करने के बाद मुझे सभी प्रकार के अजीब प्रभाव मिल गए।
  • क्या कोई भी एनिमेशन एक ही समय में होता है? विशेष रूप से एक ही दृश्य के साथ।
  • चाहे किसी भी एनिमेशन सही गुणों को बदलने के बाद जगह ले। कुछ की तरह:

-

view.alpha = 1; 
[UIView beginAnimations:…]; 
view.alpha = 0; 
[UIView commitAnimations:…]; 

इस उदाहरण में, दृश्य यह यह यह तुरन्त बदल जाएगा 1 से 0 पर अल्फा मूल्य में कोई परिवर्तन नहीं होगा। एनीमेशन शुरू करने के लिए आपको एनीमेशन ब्लॉक को किसी अन्य विधि में निकालना होगा और इसे निष्पादित करने के लिए कॉल करेंइलेक्टर इनमेन थ्रेड: withObject: afterDelay:। देरी भी 0.

+0

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

+0

तीसरे विकल्प – bealex

+0

दिलचस्प तीसरे बिंदु के साथ अद्यतन उत्तर। मैं इसे जाने दूंगा और रिपोर्ट करूंगा। – James

0

मैं एक ही मुद्दा था। मेरी परेशानी की जड़ यह थी कि मेरी एनीमेशन एक अधिसूचना द्वारा ट्रिगर किया जा रहा था, और मैं प्रत्येक दृश्य पर एक पर्यवेक्षक जोड़ रहा था, लेकिन दृश्य में हटा देना भूल गया था (याद रखें कि आईओएस 6 अब दृश्य को कॉल नहीं करता है। विश्वसनीय रूप से लोड करें)।

अनिवार्य रूप से, मैं जल्दी जल्दी है, जो दिखाई अनियमितता पैदा कर रहा था में दो बार मेरी एनीमेशन फ़ंक्शन को कॉल किया गया था।उम्मीद है कि यह किसी को लाइन से बाहर करने में मदद करता है!

0

मैंने अपने ही आवेदन में इस मुद्दे को हल करने में कामयाब रहा है।

मैंने देखा कि मेरे यूआईएममेज व्यू जिन्हें मैं एनिमेट कर रहा था, मेरे मॉडल व्यू कंट्रोलर को धक्का देने से पहले और बाद में अलग-अलग मेमोरी पते थे। इन UIImageViews ने अपने स्मृति पते को किसी भी समय स्विच नहीं किया।

मैंने सोचा कि यह शायद इस मुद्दे की जड़ हो और ऐसा लगता है कि मैं सही था।

मेरा ग्राहक का कोड -viewDidAppear में इन व्यू कंट्रोलर के UIImageViews को आवंटित/प्रारंभ कर रहा था -व्यूडलोड के बजाय। इस प्रकार, हर बार जब मैंने एक मोडल व्यू कंट्रोलर लॉन्च किया और खारिज कर दिया, तो मैं अपने यूआईएममेज व्यूज़ को एनिमेटिंग कर रहा था।

यदि आपके मानचित्र ऑब्जेक्ट का मेमोरी पता आपके मॉडलों को लॉन्च करने से पहले और बाद में बदल रहा है, तो अपने आप को जांचें, और यदि यह आपके प्रारंभिक तर्क को आपके कोड के अधिक उचित अनुभाग में ले जाना सुनिश्चित है।

उम्मीद है कि यह आपकी मदद करता है!

डेक्सटर

0

मैं UIView animateWithDuration उपयोग कर रहा था: और मैं पूरा होने के ब्लॉक का उपयोग नहीं द्वारा इसे हल। यह उप-वर्गीकृत UIView से कोड है। व्यू कंट्रोलर के व्यू में WillAppear: मैंने स्वयं को सेट किया है। Should YES को एनिमेट करें, और दृश्य नियंत्रक के दृश्य में WillDisappear: मैंने स्वयं को सेट किया है।

-(void)continueRotate { 
    if (self.shouldAnimate) { 
    [self rotateRadarView:self.radarInner]; 
    } 
} 

-(void)rotateRadarView:(UIView *)view { 
    [UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(continueRotate)]; 
    [view setTransform:CGAffineTransformRotate(view.transform, M_PI_2)]; 
    }completion:nil]; 
} 
0

मैं इसे अपने UIView उपवर्ग में मेरी एनीमेशन को पुन: प्रारंभ करके हल:

override func willMove(toWindow newWindow: UIWindow?) { 
    if newWindow != nil { 
     spinner.startSpinning() // Restart any animation here 
    } 
} 
संबंधित मुद्दे