কেন এমন হচ্ছে?
এটি কারণ যখন আপনার সাবভিউটি আপনার তত্ত্বাবধানের সীমার বাইরে থাকে, তখন সেই সাবভিউতে ঘটে যাওয়া স্পর্শ ইভেন্টগুলি সেই সংক্ষিপ্তরে সরবরাহ করা হবে না। তবে এটি তার তত্ত্বাবধানে সরবরাহ করা হবে ।
সাবভিউগুলি চাক্ষুষভাবে ক্লিপযুক্ত কিনা তা বিবেচনা না করে, স্পর্শ ইভেন্টগুলি সর্বদা লক্ষ্য দর্শনের তদারকির সীমানার আয়তক্ষেত্রকে সম্মান করে। অন্য কথায়, কোনও দৃশ্যের অংশে ঘটে যাওয়া স্পর্শ ইভেন্টগুলি যা তার তত্ত্বাবধানের সীমানা আয়তক্ষেত্রের বাইরে থাকে সেই দৃশ্যে সরবরাহ করা হয় না। লিঙ্ক
তোমাকে যা করতে হবে?
যখন আপনার তত্ত্বাবধানটি উপরে উল্লিখিত স্পর্শ ইভেন্টটি গ্রহণ করবে, আপনাকে ইউআইকেটকে স্পষ্টভাবে বলতে হবে যে এই স্পর্শ ইভেন্টটি পাওয়ার জন্য আমার সাবভিউটি এমন হওয়া উচিত।
কোড সম্পর্কে কি?
আপনার তত্ত্বাবধানে, বাস্তবায়ন করুন func hitTest(_ point: CGPoint, with event: UIEvent?)
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if isHidden || alpha == 0 || clipsToBounds { return super.hitTest(point, with: event) }
let subviewPoint = self.convert(point, to: subview)
if !subview.isHidden && subview.bounds.contains(subviewPoint) { return subview }
return super.hitTest(point, with: event)
}
চিত্তাকর্ষক গোটেচ্যা: আপনাকে অবশ্যই "সর্বোচ্চ অতি-ছোট তদারকিতে" যেতে হবে
সমস্যাটি দেখার বাইরে আপনার "সর্বোচ্চ" ভিউতে আপনাকে "উপরে" যেতে হবে।
সাধারণ উদাহরণ:
বলুন আপনার একটি স্ক্রিন এস রয়েছে, যা একটি ধারক ভিউ সি সহ রয়েছে The আসলে ভি এর বাইরে যা দেখুন
তবে লক্ষ করুন যে বি সি এর বাইরেও is
এই উদাহরণে আপনাকে সমাধানটি override hitTest
বাস্তবে সি প্রয়োগ করতে হবে, ভি তে নয় । আপনি যদি এটি ভি তে প্রয়োগ করেন - এটি কিছুই করে না।