मान लीजिए कि मेरे पास UIViewController उप-वर्ग है जो कुछ UIViews का ख्याल रखता है।UIView, इसका पर्यवेक्षण और स्पर्श बेगन:
UIViewController:
- (void)viewDidLoad {
UIImageView *smallImageView...
[self.view addSubview:smallImageView];
UIButton *button..
[self.view addSubview:button];
UIView *bigUIView.. // covers the entire screen (frame = (0.0, 0.0, 1024.0, 768.0))
[self.view addSubview:bigUIView];
...
}
AFAIK, के बाद से bigUIView
frontmost दृश्य है और पूरे स्क्रीन को शामिल किया गया है, यह touchesBegan:withEvent:
प्राप्त होगा और अन्य दृश्यों इन UIViews UIViewController के view
संपत्ति के subviews) के रूप में जुड़ जाते हैं , जैसे button
को कोई भी स्पर्श ईवेंट नहीं मिलेगा।
मेरे आवेदन में bigUIView
शीर्ष दृश्य होना चाहिए क्योंकि इसमें मुख्य उपयोगकर्ता इंटरफ़ेस ऑब्जेक्ट्स (कैलियर, वास्तव में, मुख्य गेम ऑब्जेक्ट्स) हैं, जो एनिमेटेड होने पर, अन्य सभी माध्यमिक UI तत्वों (UIButtons, आदि) के शीर्ष पर होना चाहिए।)। हालांकि, मैं अभी भी उत्तरदायी चेन में UIButtons और अन्य ऑब्जेक्ट्स प्राप्त करने में सक्षम होना चाहता हूं।
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.superview touchesBegan:touches withEvent:event];
... hit test the touch for this specific uiview..
}
नोट्स::
मैं bigUIView
कक्षा में निम्नलिखित को लागू करने की कोशिश की
bigUIView
के superview UIViewController केview
संपत्ति को संदर्भित करता है, यह यह है सभी के लिए स्पर्श घटना का प्रचार करता है subviews?bigUIView
मेंuserInteractionEnabled = YES
होना चाहिए क्योंकि यह उपयोगकर्ता इनपुट को भी संभालता है।- मैं
button
/smallImageView
को सामने नहीं ला सकता क्योंकि यह मुख्य गेम ऑब्जेक्ट्स (bigUIView
के उपन्यास) से ऊपर दिखाई देगा।
अग्रिम धन्यवाद।
धन्यवाद jlehr, 'pointInside: withEvent: 'समाधान है। जब कोई अन्य उप-दृश्यों में से किसी एक के फ्रेम आयताकार के अंदर बिंदु है, तो वापस लौटने से 'bigUIView'' 'touganBegan: withEvent: 'विधि को कॉल नहीं किया जाना चाहिए और' बटन 'की क्रिया ट्रिगर हो रही है। ध्यान दें कि यह 'bigUIView' और' बटन' के बीच युग्मन का कारण बनता है। 'BigUIView' पूरी स्क्रीन को कवर करते समय मैं केवल' UIViewController' में ईवेंट चरण विधियों को कैसे रोक सकता हूं? 'BigUIView' कक्षा में एक अलग विधि हस्ताक्षर बनाना और इसे" सभी को पकड़ें "' UIViewController' वर्ग द्वारा प्रस्तुत किया गया है? –
नहीं, 'bigUIView' में ईवेंट चरण विधियों को लागू न करें।इस तरह संदेशों को उत्तरदाता श्रृंखला को तब तक अग्रेषित किया जाएगा जब तक कि वे किसी ऑब्जेक्ट तक पहुंच न जाएं जिसमें ओवरराइड कार्यान्वयन हो (उदाहरण के लिए 'UIButton' या आपके कस्टम' UIViewController' subclass)। – jlehr
युग्मन के संबंध में, अपने व्यू कंट्रोलर में एक प्रतिनिधि विधि को लागू करने पर विचार करें कि 'bigUIView' उदाहरण वास्तविक निर्णय लेने के लिए कॉल कर सकता है। इस तरह व्यू कंट्रोलर यह जानने के लिए ज़िम्मेदार होगा कि कौन सा दृश्य संदेश प्राप्त करता है और वहां कोई युग्मन नहीं होगा। – jlehr