Bir UIView ve bir CALayer arasındaki farklar nelerdir?


103

Her ikisi de aynı özniteliklerin çoğuna sahiptir, her ikisi de farklı türde animasyonları destekler, her ikisi de farklı verileri temsil eder. Bir UIView ve bir CALayer arasındaki farklar nelerdir?

Yanıtlar:


224

İ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.


40

Ray Wenderlich blogundan ( Eğitim )

CALayers, görsel içerikli ekranda bir dikdörtgeni temsil eden basit sınıflardır. "Ama bir dakika bekleyin" diyebilirsiniz, "UIViews bunun içindir!" Bu doğru, ancak bunun bir püf noktası var: Her UIView, kendisine çektiği bir kök katmanı içerir!


33

Basitçe söylemek gerekirse, UIView, UIResponder'dan devralır, kullanıcılardan gelen olayları yönetir, NSObject'ten devralan, esas olarak işleme, animasyon vb. Üzerine odaklanan CALayer içerir.


7

UIViewiçin bir kapsayıcıdır CALayers. Kullanarak UIKit.

CALayeriç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 CALayersağı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.

UIViewdelegelerini kullanılarak elde dokunma olayları gibi özelliğe sahip -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStartolaylar ve diğer benzeri UIKitözellikler.

CALayersCore Graphics bilgisiyle çalışmak için herhangi bir basit görünüm için render UIViewyeterlidir.


0

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.


0

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

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.