Apple, alt sınıfların nasıl oluşturulacağını oldukça açık bir şekilde tanımladı UIView
, dokümanda .
Aşağıdaki listeye bir göz atın, özellikle initWithFrame:
ve layoutSubviews
. Birincisi,UIView
ve ikincisinin çerçevesini ve çerçevesini ayarlamayı amaçlamaktadır.
Bunun initWithFrame:
sadece UIView
programınızı başlatırsanız çağrıldığını da unutmayın . Eğer bir uç dosyasından (veya film şeridinden) yüklüyorsanız, initWithCoder:
kullanılır. Ve initWithCoder:
çerçevede henüz hesaplanmadı, bu yüzden Arayüz Oluşturucu'da ayarladığınız çerçeveyi değiştiremezsiniz. Önerildiği gibi bu cevap aradığınız düşünebilirler initWithFrame:
gelen initWithCoder:
kurulum için çerçeveyi.
Son olarak, UIView
bir uçtan (veya film şeridinden) yüklerseniz, awakeFromNib
özel çerçeve ve düzen başlatma işlemleri gerçekleştirme fırsatınız da vardır , çünkü awakeFromNib
çağrıldığında hiyerarşideki her görünümün arşivden çıkarıldığı ve başlatıldığı garanti edilir.
NSNibAwaking
(Şimdi doktorun yerini almıştır awakeFromNib
) belgesinden :
Diğer nesnelere mesajlar awakeFromNib içinden güvenli bir şekilde gönderilebilir; bu süre zarfında tüm nesnelerin arşivden çıkarıldığından ve başlatıldığından emin olunur (tabii ki mutlaka uyandırılmamasına rağmen)
Ayrıca, otomatik düzenleme ile görünümünüzün çerçevesini açıkça ayarlamamanız gerektiğini de belirtmek gerekir. Bunun yerine, çerçevenin düzen motoru tarafından otomatik olarak hesaplanması için bir dizi yeterli kısıtlama belirtmeniz gerekir.
Doğrudan dokümantasyondan :
Geçersiz Kılma Yöntemleri
Başlatma
initWithFrame:
Bu yöntemi uygulamanız önerilir. Bu yönteme ek olarak veya bu yöntemin yerine özel başlatma yöntemlerini de uygulayabilirsiniz.
initWithCoder:
Görünümünüzü bir Interface Builder uç dosyasından yüklerseniz ve görünümünüz özel başlatma gerektiriyorsa bu yöntemi uygulayın.
layerClass
Bu yöntemi yalnızca, görünümünüzün destek deposu için farklı bir Temel Animasyon katmanı kullanmasını istiyorsanız uygulayın. Örneğin, çiziminizi yapmak için OpenGL ES kullanıyorsanız, bu yöntemi geçersiz kılmak ve CAEAGLLayer sınıfını döndürmek istersiniz.
Çizim ve baskı
drawRect:
Görünümünüz özel içerik çiziyorsa bu yöntemi uygulayın. Görünümünüz herhangi bir özel çizim yapmıyorsa, bu yöntemi geçersiz kılmaktan kaçının.
drawRect:forViewPrintFormatter:
Bu yöntemi yalnızca yazdırma sırasında görünümünüzün içeriğini farklı şekilde çizmek istiyorsanız uygulayın.
Kısıtlamalar
requiresConstraintBasedLayout
Görünüm sınıfınız düzgün çalışmak için kısıtlamalar gerektiriyorsa bu sınıf yöntemini uygulayın.
updateConstraints
Görünümünüzün alt görünümleriniz arasında özel kısıtlamalar oluşturması gerekiyorsa bu yöntemi uygulayın.
alignmentRectForFrame:
, frameForAlignmentRect:
Görünümlerinizin diğer görünümlerle nasıl hizalandığını geçersiz kılmak için bu yöntemleri uygulayın.
Yerleşim
sizeThatFits:
Görünümünüzün yeniden boyutlandırma işlemleri sırasında normalden farklı bir varsayılan boyuta sahip olmasını istiyorsanız bu yöntemi uygulayın. Örneğin, görünümünüzün alt görüntülerin düzgün görüntülenemediği noktaya çekilmesini önlemek için bu yöntemi kullanabilirsiniz.
layoutSubviews
Alt görünümlerinizin düzeni üzerinde kısıtlama veya otomatikleştirme davranışlarının sağladığından daha kesin bir kontrole ihtiyacınız varsa bu yöntemi uygulayın.
didAddSubview:
, willRemoveSubview:
Alt görünümlerin eklenmesini ve kaldırılmasını izlemek için bu yöntemleri gerektiği gibi uygulayın.
willMoveToSuperview:
, didMoveToSuperview
Geçerli görünümün görünüm hiyerarşinizde hareketini izlemek için bu yöntemleri gerektiği gibi uygulayın.
willMoveToWindow:
, didMoveToWindow
Görünümünüzün hareketini farklı bir pencereye izlemek için bu yöntemleri gerektiği gibi uygulayın.
Olay işleme:
touchesBegan:withEvent:
, touchesMoved:withEvent:
, touchesEnded:withEvent:
, touchesCancelled:withEvent:
Doğrudan dokunmatik olayları işlemek gerekiyorsa bu yöntemleri uygulamak. (Harekete dayalı giriş için hareket tanımlayıcıları kullanın.)
gestureRecognizerShouldBegin:
Görünümünüz dokunma olaylarını doğrudan işliyorsa ve iliştirilmiş hareket tanıma araçlarının ek eylemleri tetiklemesini önlemek isteyebilirse bu yöntemi uygulayın.