मैंने नेविगेशन बार पर एक छवि (UIImageView) रखी है। अब मैं स्पर्श घटना का पता लगाना चाहता हूं और घटना को संभालना चाहता हूं। क्या आप मुझे बता सकते हैं कि मैं ऐसा कैसे कर सकता हूं?
धन्यवाद।
मैंने नेविगेशन बार पर एक छवि (UIImageView) रखी है। अब मैं स्पर्श घटना का पता लगाना चाहता हूं और घटना को संभालना चाहता हूं। क्या आप मुझे बता सकते हैं कि मैं ऐसा कैसे कर सकता हूं?
धन्यवाद।
जवाबों:
व्यावहारिक रूप में, ऐसा मत करो।
इसके बजाय UIImageView पर कस्टम स्टाइल के साथ एक बटन जोड़ें (कोई भी बटन जब तक आप चित्र निर्दिष्ट न करें)। उसके बाद जो भी तरीके आप चाहते हैं उसे संलग्न करें।
आप कई मामलों के लिए उस तकनीक का उपयोग कर सकते हैं जहां आप वास्तव में स्क्रीन के कुछ क्षेत्र को टच सामान के साथ गड़बड़ करने के बजाय एक बटन के रूप में कार्य करना चाहते हैं।
A UIImageView
से व्युत्पन्न है UIView
जो कि UIResponder
स्पर्श घटनाओं को संभालने के लिए तैयार है, इसलिए इससे प्राप्त होता है । आप प्रदान करने के लिए चाहता हूँ touchesBegan
, touchesMoved
और touchesEnded
तरीकों और उपयोगकर्ता छवि टैप करता है अगर वे बुलाया प्राप्त करेंगे। यदि आप चाहते हैं कि सभी एक टैप ईवेंट है, तो बस एक कस्टम बटन का उपयोग करना आसान है, जो कि इमेज इमेज के रूप में सेट है। लेकिन अगर आप नल, चाल आदि पर बारीक-बारीक नियंत्रण चाहते हैं, तो यह रास्ता है।
तुम भी कुछ और चीजों को देखना चाहते हो:
ओवरराइड canBecomeFirstResponder
और वापसी YES को इंगित करने के लिए कि दृश्य स्पर्श घटनाओं का फोकस बन सकता है (डिफ़ॉल्ट नहीं है)।
userInteractionEnabled
संपत्ति को हां में सेट करें । के लिए डिफ़ॉल्ट UIViews
हां है, लेकिन UIImageViews
नहीं के लिए तो आपको इसे स्पष्ट रूप से चालू करना होगा।
यदि आप मल्टी-टच इवेंट्स (जैसे चुटकी, ज़ूम, आदि) का जवाब देना चाहते हैं, तो आप multipleTouchEnabled
YES पर सेट करना चाहेंगे ।
userInteractionEnabled
मैंने अपने माता-पिता के विचार पर हां में सेट करके तय किया । देखें stackoverflow.com/questions/5887305/…
UIImageView में टच ईवेंट जोड़ने के लिए अपने .m में निम्नलिखित का उपयोग करें
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
[myImageView setUserInteractionEnabled:YES];
[myImageView addGestureRecognizer:newTap];
-(void)myTapMethod{
// treat image tap
}
उम्मीद है की वो मदद करदे।
आप एक 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];
मैं पिछले कुछ घंटों से अपनी समस्या का हल खोजने की कोशिश कर रहा हूं, कोई फायदा नहीं हुआ। मैं देखता हूं कि कई देव इस समस्या को साझा करते हैं, और मुझे लगता है कि यहां के लोग इस बारे में जानते हैं। मेरे अंदर एक से अधिक छवियां हैं UIScrollView
, उन पर टैप ईवेंट प्राप्त करने की कोशिश कर रहे हैं।
किसी से कोई घटना नहीं मिल रही है UIImangeView
, लेकिन मुझे उसी तरह के एक कार्यक्रम से मिलता है, UILable
जिसमें बहुत ही समान पैरामीटर हैं जो मैं इसे स्थापित कर रहा हूं। IOS 5.1 के तहत।
मैंने निम्नलिखित कार्य पहले ही कर लिए हैं:
UIImageView
।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]);
}
जैसा कि कहा गया है, लेबल टैप प्राप्त होता है।
UIImageView बनाने के बजाय, फिर इसे नेवबार पर रखकर, आपको बस एक UIBarButtonItem बनाना चाहिए, जिसे आप UIImageView से बनाते हैं।
सबसे पहले चित्र देखें:
UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]];
फिर अपने चित्र दृश्य से बारबटन आइटम बनाएं:
UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView];
फिर अपने नेविगेशन बार में बार बटन आइटम जोड़ें:
self.navigationItem.rightBarButtonItem = yourBarButtonItem;
याद रखें कि यह कोड व्यू कंट्रोलर में जाता है जो नेविगेशन कंट्रोलर व्यूकंट्रोलर ऐरे के अंदर होता है। तो मूल रूप से, यह "टाउचेबल इमेज-लुकिंग बार बटन आइटम" केवल नेविगेशन बार में दिखाई देगा, जब यह दृश्य नियंत्रक को दिखाया जा रहा है। जब आप किसी अन्य दृश्य नियंत्रक को धक्का देते हैं, तो यह नेविगेशन बार बटन आइटम गायब हो जाएगा ~
आप जो करना चाहते हैं touchesBegan:withEvent:
, वह UIView
(या उपवर्ग) की विधि को ओवरराइड करता है जिसमें आपका UIImageView
सबव्यू होता है।
इस विधि के भीतर, परीक्षण करें कि कोई भी UITouch
स्पर्श UIImageView
उदाहरण की सीमा के अंदर आता है (मान लें कि इसे कहा जाता है imageView
)।
है यही कारण है, करता है CGPoint
तत्व [touch locationInView]
के साथ साथ एक दूसरे को काटना CGRect
तत्व [imageView bounds]
? CGRectContainsPoint
इस परीक्षण को चलाने के लिए फ़ंक्शन देखें ।
आप में से जो इस जवाब के लिए एक स्विफ्ट 4 समाधान की तलाश कर रहे हैं। आप UIImageView पर एक टच ईवेंट का पता लगाने के लिए निम्नलिखित का उपयोग कर सकते हैं।
let gestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.isUserInteractionEnabled = true
फिर आपको अपने चयनकर्ता को इस प्रकार परिभाषित करना होगा:
@objc func imageViewTapped() {
// Image has been tapped
}
उस दृश्य पर इशारा जोड़ें। उस दृश्य में एडिट छवि तब भी छवि पर इशारे का पता लगाना होगा। यदि आप स्पर्श घटना के प्रतिनिधि विधि के साथ प्रयास करते हैं, तो उस स्थिति में भी यह पता लगा सकता है। धन्यवाद