Masalah saya: Saya memiliki superview EditViewyang pada dasarnya menempati seluruh bingkai aplikasi, dan subview MenuViewyang hanya menempati bagian bawah ~ 20%, dan kemudian MenuViewberisi subviewnya sendiri ButtonViewyang sebenarnya berada di luar MenuViewbatas (seperti ini ButtonView.frame.origin.y = -100:).
(catatan: EditViewmemiliki subview lain yang bukan bagian dari MenuViewhierarki tampilan, tetapi dapat mempengaruhi jawabannya.)
Anda mungkin sudah tahu masalahnya: kapan ButtonViewberada dalam batas-batas MenuView(atau, lebih khusus lagi, ketika sentuhan saya berada dalam MenuViewbatas-batas), ButtonViewmenanggapi peristiwa sentuh. Saat sentuhan saya berada di luar MenuViewbatas (namun masih dalam ButtonViewbatas), tidak ada peristiwa sentuhan yang diterima oleh ButtonView.
Contoh:
- (E) adalah
EditView, induk dari semua tampilan - (M) adalah
MenuView, subview dari EditView - (B) adalah
ButtonView, subview dari MenuView
Diagram:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
Karena (B) berada di luar bingkai (M), ketukan di wilayah (B) tidak akan pernah dikirim ke (M) - faktanya, (M) tidak pernah menganalisis sentuhan dalam kasus ini, dan sentuhan dikirim ke objek berikutnya dalam hierarki.
Sasaran: Saya menyimpulkan bahwa penimpaan hitTest:withEvent:dapat menyelesaikan masalah ini, tetapi saya tidak mengerti persis bagaimana caranya. Dalam kasus saya, harus hitTest:withEvent:diganti di EditView(superview 'master' saya)? Atau haruskah diganti MenuView, tampilan langsung tombol yang tidak menerima sentuhan? Atau apakah saya memikirkan hal ini dengan tidak benar?
Jika ini membutuhkan penjelasan yang panjang, sumber online yang bagus akan membantu - kecuali dokumen UIView Apple, yang belum menjelaskannya kepada saya.
Terima kasih!