UIView'in çerçevesi, sınırları, merkezi, kökeni, ne zaman kullanılır?


195

UIViewözellikleri vardır frame, bounds, centerve origin, ve hepsi birbiriyle gibi görünüyor. Çoğu zaman, a'nın framekonumunu ve boyutunu ayarlarken ilgilenirim UIView. Bunun frameküresel koordinat sistemi boundskullandığını ve yerel görünümün koordinatını kullandığını anlıyorum (bu nedenle x ve y'si 0'dır, ancak her zaman değil), ancak ne zaman ne zaman kullanacağımı hala karıştırıyorum.

Hangi bağlamda altında diğer özellikleri ((ve doğru zaman nedir) bounds, center, origin) kullanılmalıdır?


Aşağıdaki bağlantı en iyi cevaba sahiptir. stackoverflow.com/questions/5361369/…
Ohmy

Çerçeve vs resimlerle sınırları: stackoverflow.com/a/28917673/3681880
Suragch

Yanıtlar:


241

Marco'nun cevabı doğru, ama sadece "hangi bağlamda" sorusunu genişletmek için ...

çerçeve - Bu, normal iPhone uygulamaları için en sık kullandığınız özelliktir. Çoğu kontrol, "içeren" kontrole göre düzenlenir, böylece frame.origin, kontrolün görüntülenmesi gereken yere doğrudan karşılık gelir ve frame.size, kontrolü ne kadar büyük yapacağını belirler.

center - Hareket veya ölçeklendirmenin olabileceği hareketli grafik tabanlı oyunlar ve animasyonlar için odaklanacağınız özelliktir. Varsayılan olarak animasyon ve döndürme, UIView'in merkezine dayalı olacaktır. Frame özelliği tarafından bu tür nesneleri denemek ve yönetmek nadiren mantıklıdır.

sınırları - bu özellik bir konumlandırma özelliği değildir, ancak UIView'in çerçeveye göre "çekilebilir" alanını çizilebilir alanını tanımlar. Varsayılan olarak bu özellik genellikle (0, 0, genişlik , yükseklik ) şeklindedir. Bu özelliğin değiştirilmesi, çerçevenin dışına çizim yapmanıza veya çizimi çerçeve içinde daha küçük bir alana kısıtlamanıza olanak tanır. Bununla ilgili iyi bir tartışma aşağıdaki bağlantıda bulunabilir. Çizim bölgesini ayarlamak için özel bir ihtiyaç olmadıkça, bu özelliğin manipüle edilmesi nadirdir. Tek istisna, çoğu programın [[UIScreen mainScreen] bounds]uygulama için görünür alanı belirlemek ve başlangıçtaki UIView çerçevesini buna göre ayarlamak için başlangıçta kullanmasıdır.

Bir UIView'da neden bir kare dikdörtgen ve bir sınır dikdörtgen var?

Umarım bu, her mülkün kullanılabileceği durumların netleştirilmesine yardımcı olur.


33
Ben boundsbir görünüm uygulanan bir dönüşüm olduğunda yaygın olarak kullanılmaya değer olduğunu düşünüyorum . Bu koşullar altında framemülk tanımlanmamıştır. Diğer cevapların işaret ettiği gibi, centerve boundsmodifikasyonları sırasıyla görünümün pozisyonunu ve boyutunu değiştirmeye eşdeğerdir.
Stuart

36

Bunlar ilişkili değerlerdir ve özellik ayarlayıcı / alıcı yöntemleriyle (ve çerçevenin gerçek bir örnek değişkeni tarafından desteklenmeyen tamamen sentezlenmiş bir değer olduğu gerçeği kullanılarak) tutarlı tutulurlar.

Ana denklemler:

frame.origin = center - bounds.size / 2

(ile aynı)

center = frame.origin + bounds.size / 2

(ve ayrıca var)

frame.size = bounds.size

Bu kod değil, sadece üç özellik arasındaki değişmezi ifade eden denklemler. Bu denklemler ayrıca görüşünüzün dönüşümünün varsayılan olarak kimliğini varsayar. Değilse, sınırlar ve merkez aynı anlamı korur, ancak çerçeve değişebilir. Dik açılı olmayan dönüşler yapmadığınız sürece, çerçeve denetimin koordinatları açısından her zaman dönüştürülmüş görünüm olacaktır.

Tüm bu şeyler burada yararlı bir mini kütüphane ile daha ayrıntılı olarak açıklanmaktadır:

http://bynomial.com/blog/?p=24


18

Özellikleri center, boundsve framebirbirine bağlanır: biri çok yaparak istediğiniz şekilde kullanmak, başkalarının güncellenir değişen. Örneğin, framebir görünümü yeniden girmek için x / y parametrelerini değiştirmek yerine centerözelliği güncellemeniz yeterlidir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.