Yanıtlar:
İOS'ta her UIView, bir Core Animation CALayer tarafından desteklenir, bu nedenle, farkında olmasanız bile, bir UIView kullanırken CALayer'larla ilgileniyorsunuz. Core Animation'dan önce gelişen Mac'teki NSViews'tan farklı olarak, UIViews bu CALayer'ların etrafındaki hafif sarmalayıcılar olarak tasarlanmıştır.
Benzer bir soruda açıkladığım gibi "CALayer Mac / iPhone'da ne zaman kullanılır?" , doğrudan CALayers ile çalışmak size UIViews'a göre önemli performans avantajları sağlamaz. UIViews yerine CALayers ile bir kullanıcı arabirimi öğesi oluşturmak isteyebileceğiniz nedenlerden biri, Mac'e çok kolay bir şekilde taşınabilmesidir. UIViews, NSViews'tan çok farklı, ancak CALayer'lar iki platformda neredeyse aynı. Bu nedenle Core Plot çerçevesi, grafiklerini diğer UI öğeleri yerine CALayer'ları kullanarak düzenler.
UIViews'un CALayer üzerinden sağladığı bir şey, kullanıcı etkileşimi için yerleşik destektir. Bir CALayer hiyerarşisini yönetiyorsanız, dokunma ve diğer ilgili eylemler üzerinde isabet testi gerçekleştirirler. Bunu kendiniz uygulamak o kadar da zor değil, ancak yalnızca CALayer arayüzü oluştururken yazmanız gereken ekstra kod.
Temel UIView sınıfının izin verdiğinden daha karmaşık animasyonlar gerçekleştirirken genellikle bir UIView için temel katmanlara erişmeniz gerekecektir. UIView'un animasyon yetenekleri, iOS SDK olgunlaştıkça arttı, ancak yine de temeldeki CALayer ile etkileşime girerek en iyi şekilde yapılabilecek birkaç şey var.
UIView
için bir kapsayıcıdır CALayers
. Kullanarak UIKit
.
CALayer
içeriği çizdiğimiz yer. KullanmaCoreGraphics
Özel kontrol benzeri özelliklerle çalışıyorsanız, doğru yerel işleme için daha fazla katman içeren tek görünümle devam etmek harika olur. O zamandan beri CALayers
ağırlıksızdır UIView
.
Mac ve iOS için ortak bir iskelet oluşturmak üzere uygulamanızın tasarımını kullanarak izleyin CALayers
. Her iki platformda da mevcut olduğu için.
UIView
delegelerini kullanılarak elde dokunma olayları gibi özelliğe sahip -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
, tochesStart
olaylar ve diğer benzeri UIKit
özellikler.
CALayers
Core Graphics bilgisiyle çalışmak için herhangi bir basit görünüm için render UIView
yeterlidir.
En büyük fark, UIView'ın mobil cihazda CocoaTouch için tasarlanmış olmasıdır. CALayer'ın sağlamadığı bazı olay işleyicisi ekler.
UIView: Görünümlerin daha karmaşık hiyerarşi düzenleri vardır. Dokunma, çimdikleme, tıklama ve daha fazlası gibi kullanıcı etkileşimlerini alabilirler. UIViews ile çalışmak ana iş parçacığında gerçekleşir, bu CPU gücünü kullandığı anlamına gelir.
CALayer: Öte yandan, katmanların daha basit bir hiyerarşisi vardır. Bu, çözmenin daha hızlı ve ekranda çizmenin daha hızlı olduğu anlamına gelir. Görünümlerden farklı olarak yanıtlayıcı zinciri ek yükü yoktur. Katmanlar doğrudan GPU üzerinde çizilir. İşlemciyi zorlamadan ayrı bir iş parçacığında gerçekleşir.
Daha fazla ayrıntı için: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5