मेरे पास नीचे दी गई छवि में UIViews का एक गुच्छा है। लाल/गुलाबी (अर्द्ध पारदर्शी) दृश्य दूसरों के शीर्ष पर है।UIGestureRecognizer के लिए सही दृश्य को विश्वसनीय रूप से कैसे ढूंढें?
- लाल एक
UISwipeGestureRecognizer
है। - ग्रीन के पास
UITapGestureRecognizer
है। - ब्लू में कोई पहचानकर्ता नहीं है।
दिखाई (निचले बाएं) ग्रीन ट्रिगर अपने पहचानकर्ता की ओर से एक नल।
एक नल ग्रीन की छिपा भागों पर नहीं ट्रिगर अपने पहचानकर्ता (लाल ब्लॉक) करता है।
यह समस्या है: मैं ग्रीन ट्रिगर करना चाहता हूं। मैं यह कैसे कर सकता हूँ?
अभ्यास में, विचारों किसी भी क्रम में हो सकता है, किसी भी संख्या और एक दूसरे आदि की subviews हो लेकिन समस्या एक ही है:
मैं कैसे मज़बूती से ऊपरवाला का मानना है कि इशारा संभाल कर सकते हैं पा सकते हैं (टैप या स्वाइप)?
मैं नीचे दिए गए कोड के साथ की कोशिश की। यह अच्छी तरह से सभी विचारों को पार करता है, लेकिन यह विफल रहता है क्योंकि यह नहीं पता कि यह ईवेंट स्वाइप या टैप का हिस्सा है या नहीं। तो विधि हमेशा लाल दृश्य देता है। अगर मैं लाल से स्वाइप-पहचानकर्ता को हटा देता हूं, तो कोड सही तरीके से काम करता है।
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self)
{
if (self.hasASwipeRecognizer)
return self; // What if this was a tap?
if (self.hasATapRecognizer)
return self;
else
return nil;
}
else
return hitView;
}
हाँ, यह के लिए महत्वपूर्ण है (जैसा कि आप कहते हैं) superview करने के लिए सभी recognizers जोड़ सकते हैं और वहाँ से संभालने के लिए। मेरा पदानुक्रम मनमाने ढंग से जटिल है (बहुभुज सूप सोचो) लेकिन यह विचार काम करता है। –