मैं कोको टच एप्लिकेशन पर काम कर रहा था, और यह देखने के द्वारा स्पर्शों को संभालने की कोशिश कर रहा था कि दृश्य की परत का कौन सा उपन्यास छुआ था। मेरा नियंत्रक का कोड इस तरह दिखता था:हिट-परीक्षण के लिए किसी को कैलियर की प्रेजेंटेशन लेयर का उपयोग क्यों करना है?
CALayer *hitLayer = [self.view.layer hitTest:point];
यह काम नहीं कर रहा था। यह काम करेगा अगर मैं sublayers की बोतलों पर टैप किया, लेकिन शीर्ष पर नहीं। बाल खींच रहा है और Googling के एक घंटे के बाद, मैं अंत में पता लगा है कि यह काम करता है अगर एक प्रस्तुति परत का उपयोग करता है हिट परीक्षण परत खुद के बजाय करने के लिए:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
तो, मुझे मेरी समस्या हल कर लिया है , लेकिन मेरा सवाल है: क्यों?
मैंने कोर एनीमेशन गाइड के माध्यम से पढ़ा है, और मैं समझता हूं कि प्रस्तुतिकरण पेड़ और प्रतिपादन पेड़ वस्तु-मॉडल पेड़ से भिन्न हो सकता है। लेकिन मुझे समझ में नहीं आता कि प्रेजेंटेशन पेड़ (स्पष्ट रूप से) अलग हिट-परीक्षण व्यवहार क्यों करेगा। प्रेजेंटेशन पेड़ और ऑब्जेक्ट-मॉडल में समान फ्रेम, सीमाएं आदि नहीं होंगी?
self.view की कक्षा क्या है: UIView या CALayer? –
self.view एक UIView है। मैंने उपरोक्त कोड को "self.view.layer" का उपयोग करने के लिए सही किया है जैसा कि होना चाहिए था। –