वर्तमान में मेरे पास कुछ एनोटेशन के साथ एक नक्शा दृश्य है। मेरे पास कस्टम छवियों के साथ एनोटेशन है। जिस समस्या को मैं ठीक करने की कोशिश कर रहा हूं वह छवियों की संवेदनशीलता है। जब मैं उन्हें खींचने की कोशिश करता हूं, ऐसा लगता है कि मुझे ध्यान केंद्रित करने के लिए सटीक केंद्र को छूना है। क्या स्पर्श को बड़ा करने का कोई तरीका है?मैं एमकेएनोटेशन व्यू स्पर्श संवेदनशील कैसे बना सकता हूं?
उत्तर
ऐसा करने के लिए, आपको अपना खुद का कस्टम MKAnnotationView
बनाने के लिए MKAnnotationView
को उप-वर्ग करने की आवश्यकता है। अपने उप-वर्ग में, निम्न कार्यों को ओवरराइड करें:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
// Return YES if the point is inside an area you want to be touchable
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
// Return the deepest view that the point is inside of.
}
यह इंटरैक्टिव दृश्य (जैसे बटन, इत्यादि) दबाए जाने की अनुमति देता है। MKAnnotationView
में डिफ़ॉल्ट कार्यान्वयन pointInside
और hitTest
पर सख्त नहीं है क्योंकि यह वास्तव में एक अलग एनोटेशन पर भेजने के लिए एक टिप्पणी के अंदर प्रेस की अनुमति देता है। यह टच-पॉइंट पर निकटतम एनोटेशन सेंटर को ढूंढकर और घटनाओं को उस एनोटेशन में भेजकर ऐसा करता है, ऐसा इसलिए है कि निकट-साथ (ओवरलैपिंग) एनोटेशन एक-दूसरे को चुने जाने से अवरुद्ध न करें। हालांकि, यदि आप उपयोगकर्ता को सबसे ज्यादा एनोटेशन चुनना और खींचना है, तो संभवतः उपर्युक्त विधि शायद आप जो चाहते हैं, अन्यथा आप सही टिप्पणियों पर सेट करेंगे।
संपादित करें: मैं hitTest:withEvent:
का एक उदाहरण कार्यान्वयन के लिए टिप्पणी में कहा गया था - यह पर निर्भर करता है कि आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं। मूल प्रश्न ने एनोटेशन के भीतर छवियों को छूने और खींचने का सुझाव दिया, जबकि मेरे मामले में मेरे पास एनोटेशन के अंदर कुछ बटन हैं जो मैं इंटरैक्टिव होना चाहता हूं।MKAnnotationView
कार्यान्वयन (मेरी कार्यान्वयन की पहली पंक्ति पर super
के रूप में कहा जाता है) केवल पहले (सबसे बाहरी) दृश्य देता है, इसके माध्यम से ड्रिल-डाउन नहीं करता है -
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
UIView* hitView = [super hitTest:point withEvent:event];
if (hitView != nil)
{
// ensure that the callout appears above all other views
[self.superview bringSubviewToFront:self];
// we tapped inside the callout
if (CGRectContainsPoint(self.resultView.callButton.frame, point))
{
hitView = self.resultView.callButton;
}
else if (CGRectContainsPoint(self.resultView.addButton.frame, point))
{
hitView = self.resultView.addButton;
}
else
{
hitView = self.resultView.viewDetailsButton;
}
[self preventSelectionChange];
}
return hitView;
}
आप यह काफी सरल है देख सकते हैं: यहाँ मेरी कोड है यह देखने के लिए पदानुक्रम देखें कि वास्तव में स्पर्श किस उप-दृश्य में है। मेरे मामले में मैं सिर्फ यह जांचता हूं कि स्पर्श तीन बटनों में से एक के अंदर है और उनको वापस कर दें। अन्य परिस्थितियों में आपके पास पदानुक्रम या अधिक जटिल हिट परीक्षणों के माध्यम से सरल आयताकार-आधारित ड्रिलिंग हो सकती है, उदाहरण के लिए उन हिस्सों से गुजरने की अनुमति देने के लिए आपके दृश्य में पारदर्शी क्षेत्रों से बचने के लिए। यदि आपको ड्रिल करने की आवश्यकता है, तो CGRectContainsPoint
का उपयोग उसी तरह किया जा सकता है जैसा मैंने इसका उपयोग किया है, लेकिन आपके द्वारा ड्रिल किए गए प्रत्येक दृश्य-स्तर के लिए स्थानीय बिंदु निर्देशांक में अपने अंक ऑफ़सेट करना याद रखें।
preventSelectionChange
विधि, बनने चयनित से अपने कस्टम एनोटेशन को रोकने के लिए है मैं नक्शा पिन से एक अनुकूलन/इंटरैक्टिव कॉल आउट के रूप में यह उपयोग कर रहा हूँ और इस के बजाय चयनित चयन यह व्याख्या करने के लिए बदलने की अनुमति देता करने के लिए पिन यह संबंधित है रहता है।
मैं निम्नलिखित तरीके
- इशारा पहचानकर्ता वर्ग कि छूता
- UIImage वर्ग का एक उपवर्ग बनाएं हैंडल का एक उपवर्ग बनाएं में कुछ इसी तरह लागू किया, इस वर्ग के अपने इशारों को संभालने के लिए पहचानकर्ता वर्ग का उपयोग करता है एनोटेशन में
- उपयोग इस
इशारा पहचानकर्ता उपवर्ग अपने इशारों संभाल लेंगे अगर तुम उन्हें ima में किसी भी बिंदु पर प्रदर्शन जीई। यह आपकी मदद करनी चाहिए।
रखें हम पर इस समाधान यू के लिए काम किया है कि क्या अद्यतन ...
आप MKAnnotationView उपवर्ग रह गए हैं या आप इसे की छवि संपत्ति सिर्फ सेट बदल दिया?
यहां छवि संपत्ति सेट करने के लिए प्रलेखन है।
चर्चा: इस संपत्ति के लिए एक नई छवि नियत भी दृश्य के फ्रेम के आकार बदलता है इतना है कि यह चौड़ाई और नई छवि की ऊंचाई से मेल खाता है। दृश्य के फ्रेम की स्थिति बदल नहीं है।
अपने एनोटेशन व्यू के फ्रेम के आकार की जांच करें, जहां आपका ऑब्जेक्ट स्पर्श प्राप्त कर सकता है।
@jhabbott समाधान ने कभी मेरे लिए काम नहीं किया, जैसा कि मैंने here का उल्लेख किया था।
मेरे पास एक छवि और एक लेबल पक्ष है। छवि annotationview image
संपत्ति की स्थापना द्वारा दिखाया गया था, और एक UILabel
जोड़कर लेबल मैं पुनः निर्देशित UILabel
एक (जो छवि क्षेत्र शामिल है) और hitTest
करने के लिए func point(inside:with:)
विधि था बिल्कुल वैसा ही दृश्य है कि क्या मैं पर क्लिक किया वापसी लेबल या छवि। लेकिन लेबल क्लिक किसी भी कॉलबैक का उत्पादन नहीं किया था ...
अंत में, मैं समाप्त हो गया MKAnnotationView फ्रेम के विस्तार लेबल + छवि को संलग्न करने से, मैं nil
को annotationView.image
निर्धारित करते हैं, और मैं अपने कस्टम UIImageView
बनाया।
self.frame = CGRect(x: 0, y: 0, width:
self.myLabel.frame.width, height: self.myLabel.frame.height)
self.centerOffset = CGPoint(x: self.frame.width/2, y: self.myImageView.frame.height/2)
तो मैं नष्ट कर दिया point(inside:with:)
और hitTest(point:with:)
ओवरराइड कि कुछ नहीं किया:
क्योंकि मैं छवि के बीच में लंगर बिंदु चाहता था, मैं एक कस्टम स्थापित करने के लिए किया था।
और अब, पहली बार, मेरी एनोटेशन व्यू पूरी तरह प्रतिक्रियाशील है।
- 1. एमकेएनोटेशन व्यू
- 2. मैं अपना स्थानीय सर्वर केस-संवेदनशील कैसे बना सकता हूं?
- 3. सबक्लास एमकेएनोटेशन व्यू
- 4. एमकेएनोटेशन व्यू कॉलआउट कैसे छिपाएं?
- 5. मैं 'रिलेवेटिवआउट' भरने वाला 'व्यू' कैसे बना सकता हूं?
- 6. मैं एमकेएनोटेशन व्यू के कॉर्ड कैसे प्राप्त करूं?
- 7. मैं मॉडल के लिए जेनेरिक क्लास आधारित व्यू व्यू कैसे बना सकता हूं?
- 8. टी-एसक्यूएल: मैं एक अद्वितीय कुंजी कैसे बना सकता हूं जो केस संवेदनशील है?
- 9. मैं व्यू ग्रुप के सभी बच्चों पर सभी स्पर्श ईवेंट कैसे अक्षम कर सकता हूं?
- 10. मैं इस preg_match केस असंवेदनशील कैसे बना सकता हूं?
- 11. मैं रिमोट फाइल कैसे बना सकता हूं?
- 12. मैं वर्टिकल यूआईस्लाइडर कैसे बना सकता हूं?
- 13. मैं कॉन्फ़िगर स्क्रिप्ट कैसे बना सकता हूं?
- 14. मैं विस्तारित टेक्स्टबॉक्स कैसे बना सकता हूं?
- 15. मैं रंगीन टेक्स्ट कैसे बना सकता हूं?
- 16. जावास्क्रिप्ट: मैं JSONP कैसे बना सकता हूं?
- 17. मैं एक constraintViolationException कैसे बना सकता हूं?
- 18. मैं AllocateHwnd थ्रेडसेफ कैसे बना सकता हूं?
- 19. मैं पर्ल क्लास कैसे बना सकता हूं?
- 20. मैं वर्चुअल गेमपैड कैसे बना सकता हूं?
- 21. मैं लॉकलेस कतार कैसे बना सकता हूं?
- 22. मैं शेलटोस्ट कैसे बना सकता हूं?
- 23. मैं JSON ऐरे कैसे बना सकता हूं?
- 24. मैं सिंगलटन IENumerable कैसे बना सकता हूं?
- 25. मैं डिमन थ्रेड कैसे बना सकता हूं?
- 26. मैं 404 पेज कैसे बना सकता हूं?
- 27. मैं मैन्युअल diff कैसे बना सकता हूं?
- 28. मैं जावा सैंडबॉक्स कैसे बना सकता हूं?
- 29. मैं स्ट्रिंग को कैसे बना सकता हूं?
- 30. मैं ओसीआर कार्यक्रम कैसे बना सकता हूं?
क्या आप हिटटेस्ट विधि को कार्यान्वित कर सकते हैं? – Daniel
अगर मैं फिर से अपना जवाब वोट दे सकता तो मैं करूँगा! अद्यतन के लिए धन्यवाद। – Daniel
नमस्ते फिर, बिंदु के बारे में कैसे: withEvent:? क्या यह है जहां आप CGRectContainsPoint का प्रस्ताव लागू करते हैं? – Daniel