আমি নেভিগেশন বারে একটি চিত্র (ইউআইআইমেজভিউ) রেখেছি। এখন আমি স্পর্শ ইভেন্টটি সনাক্ত করতে এবং ইভেন্টটি পরিচালনা করতে চাই। আমি এটা কিভাবে করবো?
আমি নেভিগেশন বারে একটি চিত্র (ইউআইআইমেজভিউ) রেখেছি। এখন আমি স্পর্শ ইভেন্টটি সনাক্ত করতে এবং ইভেন্টটি পরিচালনা করতে চাই। আমি এটা কিভাবে করবো?
উত্তর:
ব্যবহারিক দিক থেকে, এটি করবেন না।
পরিবর্তে ইউআইআইমেজভিউতে কাস্টম শৈলীর সাথে একটি বোতাম যুক্ত করুন (আপনি চিত্রগুলি নির্দিষ্ট না করে কোনও বোতাম গ্রাফিক্স পাবেন না)। তারপরে আপনি যে পদ্ধতিতে কল করতে চান তা সংযুক্ত করুন।
আপনি সেই কৌশলটি অনেক ক্ষেত্রেই ব্যবহার করতে পারেন যেখানে আপনি সত্যিই চান পর্দার কোনও অঞ্চল টাচ স্টাফের সাথে গোলযোগ না করে বাটন হিসাবে কাজ করতে।
এ UIImageView
থেকে উদ্ভূত UIView
যা এ থেকে নেওয়া হয়েছে UIResponder
তাই এটি স্পর্শ ইভেন্টগুলি পরিচালনা করতে প্রস্তুত। আপনি প্রদান করতে চাইবেন touchesBegan
, touchesMoved
এবংtouchesEnded
পদ্ধতি এবং ব্যবহারকারী ইমেজ taps যদি তারা নামক পাবেন। আপনি যা চান তা যদি কোনও ট্যাপ ইভেন্ট হয় তবে কেবলমাত্র একটি বোতামের চিত্র হিসাবে সেট করা চিত্রের সাথে একটি কাস্টম বোতাম ব্যবহার করা সহজ। তবে আপনি যদি ট্যাপস, চালগুলি ইত্যাদির উপর সূক্ষ্ম-শস্য নিয়ন্ত্রণ করতে চান তবে এই উপায়।
আপনি আরও কয়েকটি জিনিস দেখতে চাইবেন:
ওভাররাইড canBecomeFirstResponder
এবং হ্যাঁ প্রত্যাবর্তন করুন যে চিত্রটি স্পর্শ ইভেন্টগুলির কেন্দ্রবিন্দুতে পরিণত হতে পারে (ডিফল্ট কোনও হয় না)।
userInteractionEnabled
সম্পত্তিটি হ্যাঁ সেট করুন । এর জন্য ডিফল্ট UIViews
হ্যাঁ হ্যাঁ, তবে UIImageViews
এটি কোনও নয় তাই আপনাকে স্পষ্টভাবে এটি চালু করতে হবে।
আপনি যদি মাল্টি টাচ ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে চান (যেমন চিমটি, জুম ইত্যাদি) আপনি multipleTouchEnabled
YES এ সেট করতে চাইবেন ।
userInteractionEnabled
আমার পিতামাতার দৃশ্যে হ্যাঁ সেট করে এটি ঠিক করেছি । স্ট্যাকওভারফ্লো.com
কোনও ইউআইআইমেজভিউতে একটি স্পর্শ ইভেন্ট যুক্ত করতে, আপনার .m ফাইলে নিম্নলিখিতটি ব্যবহার করুন:
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
[myImageView setUserInteractionEnabled:YES];
[myImageView addGestureRecognizer:newTap];
-(void)myTapMethod{
// Treat image tap
}
আপনি একটি ইউআইজিস্টারআর সনাক্তকারীও যুক্ত করতে পারেন। এটি আপনার ভিউ হায়ারার্কিতে আপনাকে অতিরিক্ত উপাদান যুক্ত করার প্রয়োজন হয় না, তবে তবুও আপনি মোটামুটি সহজ ইন্টারফেস দিয়ে স্পর্শ ইভেন্টগুলি পরিচালনা করার জন্য সমস্ত সুন্দরভাবে লিখিত কোড সরবরাহ করবেন:
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];
আমি গত কয়েক ঘন্টা ধরে আমার সমস্যার সমাধান পেতে চেষ্টা করেছি, কোনও লাভ হয়নি different আমি দেখতে পাচ্ছি যে অনেক বিকাশকারীরা এই সমস্যাটি ভাগ করে নিয়েছেন এবং আমি মনে করি এখানকার লোকেরা এ সম্পর্কে জানেন। এ এর ভিতরে আমার একাধিক চিত্র রয়েছেUIScrollView
, সেগুলিতে ট্যাপ ইভেন্টগুলি পাওয়ার চেষ্টা করছি।
আমি কোনও থেকে কোনও ইভেন্ট পাচ্ছি না UIImangeView
, তবে আমি UILable
এটির সাথে মিল রেখে খুব একই ধরণের পরামিতিগুলির সাথে একটি অনুরূপ থেকে একটি ইভেন্ট পাচ্ছি। আইওএস 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 *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 সমাধান খুঁজছেন তাদের জন্য আপনি ইউআইআইমেজভিউতে একটি স্পর্শ ইভেন্ট সনাক্ত করতে নিম্নলিখিতটি ব্যবহার করতে পারেন।
let gestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.isUserInteractionEnabled = true
এরপরে আপনাকে আপনার নির্বাচককে নিম্নলিখিত হিসাবে সংজ্ঞায়িত করতে হবে:
@objc func imageViewTapped() {
// Image has been tapped
}
এই দৃশ্যে অঙ্গভঙ্গি যুক্ত করুন। সেই দৃশ্যে একটি চিত্র যুক্ত করুন এবং তারপরে এটি চিত্রটিতে কোনও অঙ্গভঙ্গিটি সনাক্ত করতে পারে। আপনি স্পর্শ ইভেন্টের প্রতিনিধি পদ্ধতিতে চেষ্টা করতে পারেন। তাহলে সেই ক্ষেত্রে এটি সনাক্তও করা হতে পারে।