2011-06-14 13 views
7

मैं UIButton को एनिमेट करने की कोशिश कर रहा हूं। लेकिन इसके एनीमेशन के दौरान, UIButton के साथ कोई बातचीत नहीं है। अपेक्षित व्यवहार बटन चलने के दौरान बटन पर क्लिक करने में सक्षम होना है। यहाँ UIButton के कोड स्निपेट और एनीमेशन है:UIButton एनीमेशन के दौरान बातचीत नहीं कर रहा है

UIImage *cloudImage = [UIImage imageNamed:@"sprite.png"];  
UIButton moveBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[moveBtn setFrame:CGRectMake(0.0, 80.0, cloudImage.size.width, cloudImage.size.height)]; 
[moveBtn setImage:cloudImage forState:UIControlStateNormal]; 
[moveBtn addTarget:self action:@selector(hit:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:moveBtn]; 
CGPoint newLeftCenter = CGPointMake(300.0f + moveBtn.frame.size.width/2.0f, moveBtn.center.y); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:5.0f]; 
[UIView setAnimationRepeatCount:HUGE_VALF]; 
moveBtn.center = newLeftCenter; 
[UIView commitAnimations]; 

hit चयनकर्ता सिर्फ अगर बटन यह करने के लिए नहीं प्रतिक्रिया देने या दिखाने के लिए एक NSLog प्रदर्शित करता है। किसी भी सहायता की सराहना की जाएगी।

उत्तर

8

हाल ही में इस बारे में कुछ प्रश्न थे। एनीमेशन पूरी तरह से दृश्य है। जब तक यह खत्म नहीं होता है, तो वास्तविक बटन कूदता है, जब तक आप एनीमेशन पूर्ण नहीं हो जाते हैं, तब तक आप पुराने फ्रेम में बटन टैप कर सकते हैं।

संपादित करें:

This answer क्या मैं की बात कर रहा था। जाहिर है, आपको बटन को एनएसटीमर के साथ मैन्युअल रूप से स्थानांतरित करने की आवश्यकता है। अधिक के लिए जुड़े प्रश्न/उत्तर देखें।

अन्य लोगों एक UIViewAnimation विकल्प के रूप में UIViewAnimationOptionAllowUserInteraction गुजर सुझाव देते हैं।

+0

मूल रूप से मेरी एनीमेशन बाएं से दाएं से जा रही है, मैं एनीमेशन पूर्ण होने तक प्रतीक्षा नहीं कर सकता। यह पहले स्थान पर एक बटन रखने के उद्देश्य को हरा देगा, क्योंकि इसके पास इसके आंदोलन के दौरान इसे छूने की क्षमता है। – Frank

+0

कृपया मेरे संपादन देखें। – Moshe

+0

आह शांत THX, मैं एक touchBegan जोड़ा गया है और रेक्ट कि छुआ जा रहा है का पता चला, इस, मेरे लिए काम हालांकि यह शांत हो गया होता है, तो बटन एनीमेशन स्लाइड :( – Frank

24

UIViewAnimationOptionAllowUserInteraction को एनीमेशन विकल्प सेट करने का प्रयास करें।

[UIView animateWithDuration:.2 
         delay: 0 
        options: UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        // animation logic 
       } 
       completion:^(BOOL completed) { 
        // completion logic 
       } 
]; 
+1

की कोशिश की है कि अभी भी – Frank

+0

काम नहीं करता है के दौरान क्लिक करने योग्य होगा + 1 मेरे लिए काम किया। –

+1

बहुत अच्छा काम किया। मेरे पास एक UIButton था जो पृष्ठभूमि को एनिमेट करके स्पंदित था। इस विकल्प को जोड़ने से मेरी समस्या हल हो गई। धन्यवाद। – TMilligan

0

यह समस्या प्रति ब्लॉक बड़े एनिमेशन के कारण होती है। मैंने एनएसटीमर आधारित समाधान बनाया है, जैसा कि ऊपर सुझाया गया है, और यह काम करता है ... फिर भी आंदोलन झटकेदार था (जब तक कि मैंने प्रत्येक टाइमर ईवेंट ट्रिगर के भीतर एनीमेशन डाला नहीं)।

तो, के बाद से एनीमेशन वैसे भी आवश्यक था, मैं एक समाधान है जो कोई टाइमर की आवश्यकता है पाया। यह केवल एक छोटी दूरी को एनिमेट करता है और इस प्रकार बटन क्लिक अभी भी सटीक है, केवल एक छोटी सी त्रुटि के साथ जो मेरा मामला यूआई में बहुत अनजान है, और आपके पैराम के आधार पर कम किया जा सकता है।

कि नीचे

नोट किसी भी समय त्रुटि < 15.0 है, जो अपने एनीमेशन गति आवश्यकताओं के आधार पर अधिक सटीकता के लिए कम किया जा सकता है। आप अधिक गति के लिए अवधि का समय भी कम कर सकते हैं।

- (void)conveyComplete:(UIView*)v 
{ 
    [self convey:v delay:0]; 
} 

- (void)convey:(UIView*)v delay:(int)nDelay 
{ 
    [UIView animateWithDuration:.5 
          delay:nDelay 
         options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) 
        animations:^
        { 
         CGRect rPos = v.frame; 
         rPos.origin.x -= 15.0; 
         v.frame = rPos; 
        } 
        completion: ^(BOOL finished) 
        { 
         [self conveyComplete:v]; 
        }]; 

} 
+0

बीटीडब्लू, दृश्य को देखा जा रहा है जिसमें UIButtons शामिल हैं जो क्लिक करने योग्य हैं। – paiego

0

एक और विकल्प है कि आप एनिमेटिंग बटन पर पारदर्शी बटन जोड़ना चाहते हैं। अपने विशेष मामले में आप इसका उपयोग करने में सक्षम नहीं हो सकते हैं, क्योंकि आप बटन को ले जा रहे हैं, लेकिन आप प्रारंभिक स्थिति से अंतिम स्थिति तक कवर करने के लिए पर्याप्त ओवरले बटन बनाने में सक्षम हो सकते हैं।

मैं इस समस्या थी, और मेरे मामले में का उपयोग कर UIViewAnimationOptionAllowUserInteraction काम नहीं किया। मैं एक UIBarButtonItem के अंदर UIButton के अल्फा को एनिमेट कर रहा था (एक पल्सिंग प्रभाव बनाने के लिए initWithCustomView :) के साथ बनाया गया था, और वह विकल्प काम नहीं करेगा। मुझे एनएसटीमर विकल्प पसंद नहीं है (चिकनी नहीं), इसलिए अंत में मैंने अभी एक ओवरले बटन जोड़ा, जिसे मैं पसंद नहीं करता, लेकिन बिना किसी काम करता है।

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