Saya memiliki UIView, di mana saya telah mengatur UIButtons. Saya ingin mencari posisi tombol-tombol tersebut.
Saya sadar itu buttons.frame
akan memberi saya posisi, tetapi itu akan memberi saya posisi hanya sehubungan dengan superview langsungnya.
Adakah cara untuk menemukan posisi tombol-tombol tersebut, sehubungan dengan superview UIButtons superview?
Misalnya, ada UIView bernama "firstView".
Lalu, saya punya UIView lain, "secondView". "SecondView" ini adalah subview dari "firstView".
Lalu saya memiliki UIButton sebagai subview di "secondView".
->UIViewController.view
--->FirstView A
------->SecondView B
------------>Button
Sekarang, adakah cara kita dapat menemukan posisi UIButton itu, sehubungan dengan "firstView"?
Meskipun tidak spesifik untuk tombol dalam hierarki seperti yang diminta, saya merasa ini lebih mudah untuk divisualisasikan dan dipahami:
Dari sini: sumber asli
ObjC:
Cepat:
sumber
Diperbarui untuk Swift 3
sumber
Bingkai: (X, Y, lebar, tinggi).
Karenanya lebar dan tinggi tidak akan berubah bahkan dengan tampilan super-super. Anda bisa dengan mudah mendapatkan X, Y sebagai berikut.
sumber
Jika ada beberapa tampilan yang ditumpuk dan Anda tidak perlu (atau ingin) mengetahui kemungkinan tampilan di antara tampilan yang Anda minati, Anda dapat melakukan ini:
di mana
targetView
akan menjadi Tombol,baseView
akan menjadiViewController.view
.Apa yang coba dilakukan fungsi ini adalah sebagai berikut:
Jika
targetView
tidak memiliki tampilan super, koordinat saat ini dikembalikan.Jika
targetView's
tampilan super bukan baseView (yaitu ada tampilan lain di antara tombol danviewcontroller.view
), koordinat yang diubah diambil dan diteruskan ke yang berikutnyasuperview
.Ini terus melakukan hal yang sama melalui tumpukan tampilan yang bergerak menuju baseView.
Setelah mencapai
baseView
, itu melakukan satu konversi terakhir dan mengembalikannya.Catatan: itu tidak menangani situasi di mana
targetView
diposisikan di bawahbaseView
.sumber
Ekstensi UIView untuk mengubah bingkai subview (terinspirasi oleh jawaban @Rexb).
sumber
Anda dapat dengan mudah mendapatkan tampilan super-super sebagai berikut.
secondView -> [tombol
superview ] firstView -> [[tombol superview] superview]
Kemudian, Anda bisa mendapatkan posisi tombol ..
Anda dapat menggunakan ini:
sumber