UIView
memiliki sifat frame
, bounds
, center
, dan origin
, dan mereka semua tampaknya akan saling berkaitan. Sebagian besar waktu, saya berurusan dengan frame
ketika mengatur posisi dan ukuran a UIView
. Saya mengerti bahwa frame
menggunakan sistem koordinat global dan bounds
menggunakan koordinat tampilan lokal (oleh karena itu x dan y adalah 0, tetapi tidak selalu), tetapi masih membingungkan saya kapan harus menggunakan apa.
Di bawah konteks apa (dan apa waktu yang tepat) sifat-sifat lainnya ( bounds
, center
, origin
) harus digunakan?
Jawaban:
Jawaban Marco di atas benar, tetapi hanya untuk memperluas pertanyaan "di bawah konteks apa" ...
bingkai - ini adalah properti yang paling sering Anda gunakan untuk aplikasi iPhone normal. sebagian besar kontrol akan diletakkan relatif terhadap kontrol "mengandung" sehingga frame.origin akan langsung sesuai dengan tempat kontrol perlu ditampilkan, dan ukuran frame.size akan menentukan seberapa besar untuk membuat kontrol.
center - ini adalah properti yang kemungkinan akan Anda fokuskan untuk permainan dan animasi berbasis sprite di mana gerakan atau penskalaan dapat terjadi. Secara default animasi dan rotasi akan didasarkan pada pusat UIView. Jarang masuk akal untuk mencoba dan mengelola objek seperti itu oleh properti bingkai.
bounds - properti ini bukan properti pemosisian, tetapi mendefinisikan area yang dapat digambar dari "relatif" UIView ke bingkai. Secara default, properti ini biasanya (0, 0, lebar , tinggi ). Mengubah properti ini akan memungkinkan Anda untuk menggambar di luar bingkai atau membatasi gambar ke area yang lebih kecil di dalam bingkai. Diskusi yang baik tentang ini dapat ditemukan di tautan di bawah ini. Jarang properti ini dimanipulasi kecuali ada kebutuhan khusus untuk menyesuaikan wilayah gambar. Satu-satunya pengecualian adalah bahwa sebagian besar program akan menggunakan
[[UIScreen mainScreen] bounds]
startup untuk menentukan area yang terlihat untuk aplikasi dan mengatur kerangka UIView awal mereka sesuai.Mengapa ada bingkai persegi panjang dan persegi panjang batas dalam UIView?
Semoga ini membantu memperjelas keadaan di mana masing-masing properti bisa digunakan.
sumber
bounds
biasanya digunakan ketika tampilan memiliki transformasi yang diterapkan padanya. Dalam keadaan ini,frame
properti tidak dapat ditentukan. Seperti yang ditunjukkan oleh jawaban lain, memodifikasicenter
danbounds
setara dengan memodifikasi posisi dan ukuran tampilan masing-masing.Mereka adalah nilai terkait, dan tetap konsisten dengan metode setter / pengambil properti (dan menggunakan fakta bahwa frame adalah nilai murni yang disintesis, tidak didukung oleh variabel instance aktual).
Persamaan utama adalah:
(yang sama dengan)
(dan ada juga)
Itu bukan kode, hanya persamaan untuk mengekspresikan invarian antara ketiga properti. Persamaan ini juga menganggap transformasi pandangan Anda adalah identitas, yang secara default. Jika tidak, maka batas dan tengah tetap memiliki makna yang sama, tetapi bingkai dapat berubah. Kecuali jika Anda melakukan rotasi non-sudut kanan, bingkai akan selalu menjadi tampilan yang ditransformasikan dalam hal koordinat superview.
Semua hal ini dijelaskan secara lebih rinci dengan perpustakaan mini yang bermanfaat di sini:
http://bynomial.com/blog/?p=24
sumber
Properti
center
,bounds
danframe
saling terkait: mengubah satu akan memperbarui yang lain, jadi gunakan sesuka Anda. Sebagai contoh, alih-alih memodifikasi x / y paramsframe
untuk membuka kembali tampilan, cukup perbaruicenter
properti.sumber