ปัญหาของฉัน:ฉันได้ SuperView EditView
ที่เกิดขึ้นโดยทั่วไปกรอบโปรแกรมทั้งหมดและ subview MenuView
ซึ่งใช้เวลาเพียงด้านล่าง ~ 20% แล้วMenuView
มี subview ของตัวเองButtonView
ซึ่งอันที่จริงอาศัยอยู่นอกMenuView
's ขอบเขต (บางอย่างเช่นนี้ButtonView.frame.origin.y = -100
)
(หมายเหตุ: EditView
มีMenuView
มุมมองย่อยอื่น ๆ ที่ไม่ได้เป็นส่วนหนึ่งของลำดับชั้นการดู แต่อาจส่งผลต่อคำตอบ)
คุณอาจทราบปัญหาแล้ว: เมื่อButtonView
ใดที่อยู่ในขอบเขตของMenuView
(หรือโดยเฉพาะอย่างยิ่งเมื่อการสัมผัสของฉันอยู่ในMenuView
ขอบเขต) ButtonView
ตอบสนองต่อเหตุการณ์การสัมผัส เมื่อสัมผัสของฉันอยู่นอกMenuView
ขอบเขตของ (แต่ยังอยู่ในButtonView
ขอบเขตของ) จะไม่ได้รับเหตุการณ์สัมผัสใดButtonView
ๆ
ตัวอย่าง:
- (E) คือพาเรน
EditView
ต์ของมุมมองทั้งหมด - (M) คือ
MenuView
มุมมองย่อยของ EditView - (B) คือ
ButtonView
มุมมองย่อยของ MenuView
แผนภาพ:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
เนื่องจาก (B) อยู่นอกเฟรมของ (M) การแตะในพื้นที่ (B) จะไม่ถูกส่งไปที่ (M) - อันที่จริง (M) จะไม่วิเคราะห์การสัมผัสในกรณีนี้และระบบจะส่งการสัมผัสไปที่ วัตถุถัดไปในลำดับชั้น
เป้าหมาย:ฉันรวบรวมว่าการลบล้างhitTest:withEvent:
สามารถแก้ปัญหานี้ได้ แต่ฉันไม่เข้าใจว่าจะทำอย่างไร ในกรณีของฉันควรhitTest:withEvent:
จะแทนที่ในEditView
(superview 'master' ของฉัน) หรือไม่ หรือควรจะลบล้างในMenuView
superview โดยตรงของปุ่มที่ไม่ได้รับการสัมผัส? หรือฉันคิดเรื่องนี้ไม่ถูกต้อง?
หากต้องการคำอธิบายที่ยาวแหล่งข้อมูลออนไลน์ที่ดีจะเป็นประโยชน์ยกเว้นเอกสาร UIView ของ Apple ซึ่งยังไม่ชัดเจนสำหรับฉัน
ขอบคุณ!