2009-05-12 11 views
94

की स्पर्श घटना का पता कैसे लगा सकता हूं मैंने नेविगेशन बार पर एक छवि (UIImageView) रखी है। अब मैं टच इवेंट का पता लगाना चाहता हूं और घटना को संभालना चाहता हूं। क्या आप मुझे बता सकते हैं कि मैं यह कैसे कर सकता हूं?मैं UIImageView

धन्यवाद।

+0

इस स्थिति में मैं (और आपको लगता है कि) एक कस्टम UIButton का उपयोग करेगा। – titaniumdecoy

+0

चेक ** स्विफ्ट संस्करण उत्तर ** [http://stackoverflow.com/a/41328885/3177007 ](http://stackoverflow.com/a/41328885/3177007) –

उत्तर

3

आप जो करना चाहते हैं touchesBegan:withEvent:UIView (या सबक्लास) की विधि को ओवरराइड करें जिसमें UIImageView सबव्यू शामिल है।

इस विधि के भीतर, UITouch किसी भी UIImageView उदाहरण की सीमाओं के अंदर छूने का परीक्षण करें (मान लें कि इसे imageView कहा जाता है)।

है, CGPoint तत्व [touch locationInView]CGRect तत्व [imageView bounds] साथ साथ एक दूसरे को काटना पड़ता है? इस परीक्षण को चलाने के लिए फंक्शन CGRectContainsPoint पर देखें।

+0

आपके उत्तर के लिए धन्यवाद। मैंने इस तरह के दृश्य को जोड़ा है: [navBar addSubview: self.pImage]; // नेविगेशन बार के एक सबव्यू के रूप में जोड़ा गया। मैंने फ़ंक्शन को ओवरराइड कर दिया है लेकिन फ़ंक्शन कभी नहीं कहा जाता है। मैंने यद्यपि UIImageView की संपत्ति userInteractionEnabled को सेट किया है। क्या मुझे कुछ याद आ रही है? – ebaccount

+0

स्पर्शों की जांच करेंगान: साथ: विधि: विधि। यह कैसे काम करता है के खोज इंजन पर बहुत सारे उदाहरण हैं। –

113

UIImageViewUIView से लिया गया है जो UIResponder से लिया गया है, इसलिए यह स्पर्श ईवेंट को संभालने के लिए तैयार है। आप touchesBegan, touchesMoved, और touchesEnded विधियों को प्रदान करना चाहते हैं और यदि उपयोगकर्ता छवि को टैप करता है तो वे कॉल करेंगे। यदि आप चाहते हैं कि एक टैप इवेंट है, तो बटन छवि के रूप में छवि सेट के साथ कस्टम बटन का उपयोग करना आसान है। लेकिन यदि आप नल, चाल, इत्यादि पर बेहतर अनाज नियंत्रण चाहते हैं तो यह जाने का रास्ता है। हाँ लौट संकेत मिलता है कि दृश्य स्पर्श इवेंट का ध्यान केंद्रित हो सकता है (डिफ़ॉल्ट नहीं है)

  • अवहेलना canBecomeFirstResponder और:

    तुम भी कुछ और चीजों को देखने चाहता हूँ।

  • userInteractionEnabled संपत्ति को YES पर सेट करें। UIViews के लिए डिफ़ॉल्ट हाँ है, लेकिन UIImageViews के लिए कोई नहीं है इसलिए आपको इसे स्पष्ट रूप से चालू करना होगा।

  • यदि आप मल्टी-टच ईवेंट (यानी चुटकी, ज़ूम, आदि) का जवाब देना चाहते हैं तो आप multipleTouchEnabled को YES पर सेट करना चाहते हैं।

+0

मैंने कोशिश की लेकिन कम से कम मुझे स्पर्श नहीं मिला बेगन घटनाएं ... वह क्यों है? – Markus

+5

@ मार्कस: मुझे एक ही समस्या थी, लेकिन मेरे मूल दृश्य पर 'userInteractionEnabled' को YES पर सेट करके इसे ठीक किया गया। Http://stackoverflow.com/questions/5887305/uiview-user-interaction-enabled-false-on-parent-but-true-on-child –

135

व्यावहारिक रूप से, ऐसा मत करें।

UIImageView पर कस्टम शैली के साथ एक बटन जोड़ें (जब तक आप छवियों को निर्दिष्ट नहीं करते हैं तब तक कोई बटन ग्राफिक्स नहीं)। फिर उस विधि को संलग्न करें जिसे आप बुला सकते हैं।

आप उस तकनीक का उपयोग कई मामलों के लिए कर सकते हैं जहां आप वास्तव में स्क्रीन के कुछ क्षेत्र को टच सामान के साथ गड़बड़ करने के बजाए बटन के रूप में कार्य करना चाहते हैं।

+0

मैंने नेविगेशन बार में एक बटन जोड़ा है और मैं स्पर्श को भी संभाल सकता हूं आयोजन। हालांकि, मैं इस बटन पर एक गोल छवि जोड़ना चाहता हूं। क्या आप मुझे बता सकते हैं कि मैं प्रोग्रामेटिक तरीके से कैसे कर सकता हूं? साथ ही, क्या आप मुझे बता सकते हैं कि मैं बटन प्रॉपर्टी को "कस्टम" प्रोग्रामेटिक रूप से कैसे सेट कर सकता हूं? – ebaccount

+0

UIButton के लिए दस्तावेज़ों को देखें - आपको नियंत्रण स्थिति के लिए पृष्ठभूमि छवियों को सेट करने की आवश्यकता है, आप सामान्य बनाम चयनित/हाइलाइट किए गए विभिन्न छवियों के लिए अलग-अलग छवियां चाहते हैं। बटन शैली जो आपने UIButtonStyleCustom पर सेट की है, मुझे विश्वास है - फिर, UIButton पर स्टाइल प्रॉपर्टी के लिए दस्तावेज़ देखें। –

+0

UIImageView के शीर्ष पर UIButton को शीर्ष पर थोड़ा ऊपर नहीं जोड़ रहा है? आप एक अतिरिक्त वस्तु जोड़ रहे हैं, जबकि आप पहले से मौजूद UIImageView ऑब्जेक्ट के स्पर्श विधियों को लागू कर सकते हैं। नहीं? – samvermette

6

एक स्पर्श करने योग्य UIImageView बनाने के बजाय इसे नेविबार पर रखकर, आपको केवल UIBarButtonItem बनाना चाहिए, जिसे आप UIImageView से बाहर करते हैं।

UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]]; 

फिर अपनी छवि दृश्य से बाहर barbutton आइटम बनाने:

self.navigationItem.rightBarButtonItem = yourBarButtonItem; 
:

UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView]; 

फिर अपने नेविगेशन पट्टी करने के लिए बार बटन आइटम जोड़ने

पहले छवि दृश्य बनाना

याद रखें कि यह कोड दृश्य नियंत्रक में जाता है जो एक नेविगेशन नियंत्रक viewcontrolle के अंदर है आर सरणी तो मूल रूप से, यह "स्पर्श करने योग्य छवि दिखने वाला बार बटन आइटम" केवल तब दिखाई देगा जब यह दृश्य नियंत्रक दिखाया जा रहा हो। जब आप एक और दृश्य नियंत्रक को दबाते हैं, तो यह नेविगेशन बार बटन आइटम गायब हो जाएगा ~

23

आप एक UIGestureRecognizer भी जोड़ सकते हैं। आपके दृश्य को पदानुक्रम में एक अतिरिक्त तत्व जोड़ने के लिए आप की आवश्यकता नहीं है, लेकिन अभी भी प्रदान करता है आप एक काफी सरल अंतरफलक के साथ संपर्क की घटनाओं से निपटने के लिए सभी अच्छी तरह से लिखा कोड होगा:

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] 
              initWithTarget:self action:@selector(handleSwipe:)]; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    [imgView_ addGestureRecognizer:swipeRight];   
    [swipeRight release]; 
    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] 
              initWithTarget:self action:@selector(handleSwipe:)]; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    [imgView_ addGestureRecognizer:swipeLeft]; 
    [swipeLeft release]; 
+10

imgView_ –

+0

के लिए UserInteractionEnabled सेट करना न भूलें यह एक बहुत ही साफ दृष्टिकोण है। मुझे एक टैप हैंडलर जोड़ने की अनुमति है जिसमें मेरे (पहले से जटिल) में कोई बदलाव नहीं है, सेटअप और हैंडलिंग देखें। एक सरल कंकाल टैप हैंडलर के लिए https://developer.apple.com/library/ios/documentation/UIKit/reference/UITapGestureRecognizer_Class/index.html पर "अधिक ..." देखें। – Brandyn

12

मैं अलग धागे पर पर किया गया है पिछले कुछ घंटों में मेरी समस्या का हल ढूंढने की कोशिश कर रहा है, इसका कोई फायदा नहीं हुआ। मुझे लगता है कि कई देव इस समस्या को साझा करते हैं, और मुझे लगता है कि यहां लोगों को इसके बारे में पता है। मेरे पास UIScrollView के अंदर कई छवियां हैं, जो उन पर टैप ईवेंट प्राप्त करने का प्रयास कर रही हैं।

UIImangeView से कोई भी ईवेंट नहीं मिल रहा है, लेकिन मुझे इसी तरह के पैरामीटर के साथ इसी तरह के UILable से एक ईवेंट मिलता है। आईओएस 5.1 के तहत।

  1. सेट दोनों `UIImageView और माता पिता के देखने के लिए हाँ करने के लिए setUserInteractionEnabled:

    मैं पहले से ही निम्नलिखित किया है।

  2. सेट सेट MultipleTouch UIImageView के लिए हाँ में सक्षम है।
  3. UIImageView उपखंड की कोशिश की, किसी की भी मदद नहीं की।

नीचे कुछ कोड अटैच किया जा रहा है, इस कोड में मैं दोनों एक UIImageView और UILabel प्रारंभ, लेबल घटनाओं फायरिंग के मामले में ठीक काम करता है। मैंने अप्रासंगिक कोड को रखने की कोशिश की। धन्यवाद दोस्तों, इलान

UIImageView *single_view = [[UIImageView alloc]initWithFrame:CGRectMake(200, 200, 100, 100)]; 
single_view.image=img; 
single_view.layer.zPosition=4; 

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)]; 
[single_view addGestureRecognizer:singleTap]; 
[single_view setMultipleTouchEnabled:YES]; 
[single_view setUserInteractionEnabled:YES]; 
[self.myScrollView addSubview:single_view];  
self.myScrollView.userInteractionEnabled=YES; 

UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
testLabel.backgroundColor=[UIColor redColor]; 
[self.myScrollView addSubview:testLabel]; 
[testLabel addGestureRecognizer:singleTap]; 
[testLabel setMultipleTouchEnabled:YES]; 
[testLabel setUserInteractionEnabled:YES]; 
testLabel.layer.zPosition=4; 

और तरीका है जो घटना संभालता है:

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture 
{ 
    UIView *tappedView = [gesture.view hitTest:[gesture locationInView:gesture.view] withEvent:nil]; 
    NSLog(@"Touch event on view: %@",[tappedView class]); 
} 

के रूप में कहा, लेबल नल प्राप्त होता है।

-2

उस दृश्य में इशारा जोड़ें। उस दृश्य में छवि को देखें, फिर भी यह छवि पर इशारा कर रहा होगा। क्या आप टच इवेंट के प्रतिनिधि विधि के साथ प्रयास कर सकते हैं, फिर भी उस मामले में यह पता लगाया जा सकता है। धन्यवाद

48

को जोड़ने के लिए एक UIImageView करने के लिए एक स्पर्श घटना अपने मीटर में निम्नलिखित

UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)]; 

[myImageView setUserInteractionEnabled:YES]; 

[myImageView addGestureRecognizer:newTap]; 


-(void)myTapMethod{ 
    // treat image tap 
} 

आशा व्यक्त की कि मदद करता है का उपयोग करें।

+3

यह एक छवि दृश्य क्लिक करने योग्य बनाने के लिए एक बेहद सरल और साफ तरीका है। यह शीर्ष जवाब होना चाहिए। धन्यवाद! – Jason

+0

खुश है कि आपको यह उपयोगी लगता है। खुश कोडिंग! –

+0

userInteractionEnabled = सत्य वह हिस्सा है जो भूलना आसान है, धन्यवाद। –

0

सबसे पहले आपको UIButton रखना चाहिए या तो आप इस बटन के लिए पृष्ठभूमि छवि जोड़ सकते हैं या आपको बटन पर UIImageView रखना होगा।