2013-03-03 5 views
9

मैंने इस मंच में कई प्रश्न देखे हैं जो "यूआईवी व्यू के अंदर यूआईब्यूटन, एनिमेटेड काम नहीं करते हैं", लेकिन उत्तर देने की कोशिश करने के बादUIView के अंदर UIUutton UIView के बाद काम नहीं कर रहा है एनिमेटेड

a) UIViewAnimationOptionAllowUserInteraction to the options 
b) subView.setUserInteractionEnabled = YES 
c) [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; 

उनमें से कोई भी :-(

यहाँ मेरे लिए काम कर रहा है परिदृश्य है। अनुप्रयोग लैंडस्केप मोड में है और एक UIView बुलाया menuView एक्स = 480 पर रखा गया है, y = 0। इसकी ऊंचाई = 200 और चौड़ाई = 150। इसलिए, जब मैं ऊपरी दाएं कोने पर बटन टैप करता हूं, तो निम्न कोड

निष्पादित किया जाता है
- (IBAction)showMenu { 
    [menuView setUserInteractionEnabled:YES]; 
    [optionsButton setUserInteractionEnabled:YES]; 
    [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         self.view.frame = CGRectOffset(self.view.frame, 0, 200); 
        } 
        completion:NULL]; 
} 

आउटपुट ?: दृश्य दिखाई दे रहा है, लेकिन विकल्प मेनू के अंदर विकल्प क्लिक करने योग्य नहीं है। मैं एक घटना को झुका, एक NSLog किया (@ "विकल्प बटन क्लिक किया"), लेकिन कुछ नहीं होता :-(

कृपया मुझे बताओ कि मैं गलत क्या कर रहा हूँ

अद्यतन:? जब मैं जगह सबव्यूव जो self.view के अंदर "menuView" है, फिर रनिंग पर क्लिक करें और विकल्प बटन पर क्लिक करें, मुझे NSLog संदेश मिलता है। केवल अगर मैं मेन्यू के मूल.एक्स को 480 और ऊपर के रूप में निर्दिष्ट करता हूं, तो यह काम नहीं करता है।

+1

शायद यह शून्य है क्योंकि आपने आउटलेट को झुकाया नहीं है। – CodaFi

+1

जो आउटलेट तक नहीं जुड़ा हुआ है? यदि आप बटन या दृश्य के बारे में बात कर रहे हैं, तो मैंने अपनी .h फ़ाइल @ संपत्ति (कमजोर, nonatomic) IBOutlet UIView * menuView में आउटलेट में बॉट लगाया है; @ संपत्ति (कमजोर, nonatomic) IBOutlet UIButton * विकल्प बटन; – thandasoru

+1

ब्रेकपॉइंट सेट करें और फिर सुनिश्चित करें। – CodaFi

उत्तर

24

यदि आप UIButton देख सकते हैं, तो इसके उपयोगकर्ता इंटरैक्शनएनेबल (डिफ़ॉल्ट रूप से हाँ!) सेट है, और इसके पर्यवेक्षण पूरे पदानुक्रम में userInteractionEnabled हाँ है - आपको इसके साथ बातचीत करने में सक्षम होना चाहिए।

एक एनीमेशन कभी भी आपके उपयोगकर्ता इंटरटेक्शन सक्षम नहीं होगा संपत्ति! तो आप वहां क्या कर रहे हैं बस अनावश्यक है। यदि आप एनीमेशन के दौरान इंटरैक्शन को सक्षम करने का प्रयास करते हैं - यह एक अलग कहानी है और यह केवल एक विकल्प है जो एनीमेशन संदेश को पास किया गया है।

तो यदि यह आपकी समस्या नहीं है (और शायद नहीं है), तो मुझे लगता है कि पर्यवेक्षण के फ्रेम में से एक UIButton को क्रॉप कर रहा है!

अब आप देखते हैं, अगर एक UIButton (या किसी भी UIView) एक UIView के फ्रेम के बाहर है, यह अभी भी, देखा जा सकता है जब तक कि clipsToBounds superview पर सेट है।

और उस स्थिति का नतीजा यह है कि: आप मुझे देख सकते हैं, लेकिन आप मुझे छू नहीं सकते।

+1

ठीक है, मैंने UIView (menuView) के अंदर UI5 की चौड़ाई 185 होने के लिए बनाई है। मेनू दृश्य की चौड़ाई 200 है। अगर मैं पर्यवेक्षक के फ्रेम (जिसका चौड़ाई 480 है) UIButton को क्रॉप कर रहा है तो मुझे कैसे पता चलेगा? क्या आप कृपया मेरी मदद कर सकते हैं? – thandasoru

+1

यदि मैं मेनू स्वयं को अपने self.view के अंदर रखता हूं और ऐप चलाता हूं, तो यह काम करता है। केवल अगर मैं मेनू को बाहर देखता हूं और 200 से self.view.frame ऑफ़सेट करने का प्रयास करता हूं, तो यह काम नहीं करता है। मुझे लगता है कि शायद यह इस तथ्य के कारण है कि मेन्यू व्यू self.view के अंदर नहीं है। इसलिए यदि मैं मेन्यू व्यू को समायोजित करने के लिए self.view की चौड़ाई बढ़ाता हूं, तो इसे काम करना चाहिए, है ना? – thandasoru

+1

यदि आप मेन्यू को देख रहे हैं तो स्वयं को "बाहर" देखें। - तो यह कहां है? क्या आप विचारों के पदानुक्रम का सटीक वर्णन कर सकते हैं? –

5

मेरे मामले में जिसमें दृश्य दृश्य की ऊंचाई पर एक बाधा गायब होती है, दृश्य ऊंचाई 0 होने के कारण होता है। बटन दृश्य के नीचे दिखाई देते थे, लेकिन अस्पृश्य।

1

मेरे मामले में, ऐसा लगता है कि मेरे एनिमेटेड संक्रमण अभी तक पूरा नहीं हुआ है। मैं animateTransition:context विधि के अंत में completeTransition:Bool डालना भूल गया।

2

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

  • अपने UIViews पृष्ठभूमि रंग को लाल रंग में बदलें ताकि आप वास्तव में देख सकें कि यह कहां एनिमेट करता है।

  • यदि आपका यूआईवी व्यू दूसरे दृश्य में है, तो clipSubviews चालू करें ताकि आप केवल subView के भीतर वास्तव में सक्षम हो सकें।

  • अपनी परियोजना चलाएं।

यदि आपकी UIView इसकी सामान्य ऊंचाई और चौड़ाई नहीं है, तो संभव है कि आपने अपने एनीमेशन कॉल में कुछ कोड को अनदेखा कर दिया हो।

सुनिश्चित करें कि आपके x, y, width, height एनीमेशन कोड के भीतर सही ऑर्डर में दिखाए जा रहे हैं।