2012-08-07 17 views
9

मैं आईपैड पर आईओएस 5 के लिए एक्सकोड 4.4 का विकास कर रहा हूं और अपना कस्टम बटन बनाते समय स्टोरीबोर्ड लेआउट का उपयोग कर रहा हूं।मैं एक कस्टम UIButton पर टैप निर्देशांक कैसे प्राप्त करूं?

मेरे पास टच इवेंट सही ढंग से काम कर रहा है और लॉगिंग कर रहा है लेकिन अब मैं अपने कस्टम बटन पर टैप के एक्स/वाई निर्देशांक प्राप्त करना चाहता हूं।

यदि संभव हो, तो मैं समन्वय को संपूर्ण आईपैड स्क्रीन के सापेक्ष कस्टम बटन से संबंधित होना चाहता हूं।

- (IBAction)getButtonClick:(id)sender; 

और .m फ़ाइल में मेरी कोड:

- (IBAction)getButtonClick:(id)sender { 

     NSLog(@"Image Clicked."); 
    } 

जैसा मैंने कहा कि सही ढंग से लॉग जब मैं छवि नल,

यहाँ ज फ़ाइल में मेरी कोड है।

मैं टैप के निर्देशांक कैसे प्राप्त कर सकता हूं?

मैंने इंटरनेट से कुछ अलग उदाहरणों का प्रयास किया है, लेकिन जब वे लॉग बॉक्स में संख्याओं (शायद निर्देशांक) का एक गुच्छा प्रदर्शित करते हैं तो वे हमेशा फ्रीज करते हैं। मैं आईओएस के विकास के लिए बहुत नया हूं इसलिए कृपया इसे यथासंभव सरल बनाएं। धन्यवाद!

+1

तुम क्यों निर्देशांक की ज़रूरत है? –

+0

Artern सही सवाल पूछ रहा है। क्या आपको वास्तव में एक बटन के भीतर निर्देशांक जानने की आवश्यकता है, या आप सिर्फ यह जानना चाहते हैं कि कौन सा बटन क्लिक किया गया था (इस मामले में, आपको "प्रेषक और घटना" के व्लादिमीर के उत्कृष्ट सुझाव की आवश्यकता नहीं है), बल्कि आप इसे देख सकते हैं यह निर्धारित करने के लिए कि कौन सा बटन क्लिक किया गया था 'प्रेषक' पर। – Rob

+2

मुझे निर्देशांक की आवश्यकता है क्योंकि मैं UIButton के रूप में एक छवि प्रदर्शित कर रहा हूं और मुझे यह जानने की आवश्यकता है कि उपयोगकर्ता ने उस छवि पर कहां टैप किया था। मुझे पहले से ही पता है कि किस बटन को क्लिक किया गया था। – twbbas

उत्तर

28

स्पर्श स्थान आप बटन कार्रवाई विधि का एक और प्रकार का उपयोग कर सकते हैं पाने के लिए: myAction:forEvent: (यदि आप इसे आईबी इंटरफ़ेस टिप्पणी से बनाने के तर्क क्षेत्र में "प्रेषक और घटना" विकल्प: enter image description here)

फिर अपने कार्रवाई हैंडलर में

आप उदाहरण के लिए, घटना पैरामीटर से स्पर्श स्थान प्राप्त कर सकते हैं:

- (IBAction)myAction:(UIButton *)sender forEvent:(UIEvent *)event { 
    NSSet *touches = [event touchesForView:sender]; 
    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:sender]; 
    NSLog(@"%@", NSStringFromCGPoint(touchPoint)); 
} 
+1

आपके विस्तृत उत्तर के लिए धन्यवाद। हालांकि, मुझे अभी भी वही त्रुटि मिल रही है जब मैंने ऑनलाइन से दूसरे कोड की कोशिश की। "अपरिचित चयनकर्ता उदाहरण 0xde26e40 2012-08-07 10: 2 9: 36.126 मतभेद [41044: 707] *** बिना अपवाद अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएनवालिडअर्ग्यूमेंट एक्सेप्शन', कारण: '- [मतभेद दृश्य नियंत्रक प्राप्त करें बटन:]: अज्ञात चयनकर्ता भेजा गया उदाहरण के लिए 0xde26e40 '"कोई विचार मिला? – twbbas

+1

@ user1262552, आपको अभी भी मिल गया है बटन: अपने बटन एक्शन से जुड़ी विधि, अपनी स्टोरीबोर्ड फ़ाइल या कोड जांचें ताकि यह सुनिश्चित किया जा सके कि बटन एक्शन आपके व्यू कंट्रोलर – Vladimir

+0

की मौजूदा विधि से जुड़ा हुआ है और जब मैं छवि पर टैप करता हूं तो ऐप फ्रीज लगता है। – twbbas

0
अपने समग्र निर्देशांक के लिए

(स्क्रीन के संदर्भ में), आप एक CGPoint कि अपने स्पर्श के निर्देशांक शामिल बनाना होगा। लेकिन ऐसा करने के लिए, आपको पहले उस स्पर्श को प्राप्त करने की आवश्यकता है। तो टच इवेंट प्राप्त करके शुरू करें, फिर locationInView विधि का उपयोग करके उस बिंदु को बनाकर। अब, जब आप स्पर्श को लॉग करना चाहते हैं, तो जब उपयोगकर्ता छूता है, या जब वे अपनी उंगली उठाते हैं, तो आपको touchesBegan या touchesEnded विधि में इस कोड को लागू करना होगा। मान लीजिए कि आप touchesEnded करते हैं, जो सभी स्पर्श घटनाओं वाले एनएसएससेट कैल्स "स्पर्श" को पास करता है।

UITouch *tap = [touches anyObject]; 
CGPoint touchPoint = [tap locationInView:self.view]; 

"टचपॉइंट" में अब उस बिंदु को शामिल किया जाएगा जिस पर उपयोगकर्ता अपनी उंगली उठाता है। निर्देशांक प्रिंट आउट के लिए, आपको सिर्फ इतना है कि बिंदु के x और y गुण का उपयोग:

CGFloat pointX = touchPoint.x; 
CGFloat pointY = touchPoint.y; 
NSLog(@" Coordinates are: %f, %f ", pointX, pointY); 

यही चाहिए उत्पादन स्पर्श के निर्देशांक। अब आप जिस भी बटन का उपयोग कर रहे हैं उसे संदर्भित करने के लिए, मैं सुझाव दूंगा कि आप बिंदु से बटन के निर्देशांक के मानों को मैन्युअल रूप से घटाएं। यह एक साधारण समाधान की तरह प्रतीत होता है, और ईमानदारी से मुझे किसी अन्य ऑब्जेक्ट के संदर्भ में निर्देशांक प्राप्त करने का कोई तरीका नहीं पता है, जब तक कि आप उस ऑब्जेक्ट के आधार पर कोई दृश्य न करें, और इसे self.view के बजाय locationInView पर पास करें।

स्पर्शों के बारे में अधिक जानकारी के लिए, ट्यूटोरियल here का एक बड़ा सेट है।

1

स्विफ्ट 3 की वजह से।0 स्वीकार किए जाते हैं जवाब काम करता है के रूप में इस वाक्य रचना को छोड़कर एक ही बदल जाएगा:

स्विफ्ट 3.0:

@IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) { 
    let myButton = sender as! UIButton 
    let touches = event.touches(for: myButton) 
    let touch = touches?.first 
    let touchPoint = touch?.location(in: myButton) 
    print("touchPoint\(touchPoint)") 
    }