Які відмінності між UIView та CALayer?


103

Обидва мають однакові атрибути, обидва підтримують різні види анімації, обидва представляють різні дані. Які відмінності між UIView та CALayer?

Відповіді:


224

На iOS кожен UIView підтримується базовим CALayer анімації, тому ви маєте справу з CALayers під час використання UIView, навіть якщо ви цього не усвідомлюєте. На відміну від NSViews на Mac, що еволюціонував до існування Core Animation, UIViews призначені для легкої обгортки навколо цих CALayers.

Як я описую в аналогічному запитанні "Коли використовувати CALayer на Mac / iPhone?" , робота безпосередньо з CALayers не дає вам значних переваг у порівнянні з UIViews. Однією з причин, можливо, ви хочете створити елемент інтерфейсу користувача за допомогою CALayers замість UIViews, це те, що він може бути дуже легко перенесений на Mac. UIView дуже відрізняються від NSViews, але CALayers майже однакові на двох платформах. Ось чому основна рамка основної графіки розкладає свої графіки, використовуючи CALayers замість інших елементів інтерфейсу.

Одне, що надає UIView для CALayers, - це вбудована підтримка взаємодії з користувачами. Вони обробляють хіт-тестування на дотики та інші пов'язані з цим дії, які вам потрібно буде створити самостійно, якщо керуєте ієрархією CALayers. Сам реалізувати це не так складно, але це додатковий код, який потрібно буде написати при створенні інтерфейсу, призначеного лише для CALayer.

Вам часто буде потрібно звертатися до базових шарів для UIView, виконуючи складніші анімації, ніж дозволяє базовий клас UIView. Можливості анімації UIView зросли по мірі дозрівання SDK для iOS, але все ж є кілька речей, які найкраще зробити, взаємодіючи з базовим CALayer.


40

З блогу Рея Вендерліха ( Навчальний посібник )

CALayers - це просто класи, що представляють прямокутник на екрані з візуальним вмістом. "Але зачекайте чортову хвилину", ви можете сказати, "для цього призначені UIView!" Це правда, але в цьому є хитрість: кожен UIView містить кореневий шар, до якого він звертається!


33

Простіше кажучи, UIView успадковує від UIResponder, обробляє події від користувачів, містить CALayer, який успадковує від NSObject, головним чином фокусується на візуалізації, анімації тощо.


7

UIViewє контейнером для CALayers. Використання UIKit.

CALayerде ми малюємо вміст. ВикористанняCoreGraphics

Якщо ви працюєте із спеціальними функціями управління, такими як функції, було б чудово продовжувати роботу з одним представленням, що містить більше шарів для точного нативного відображення. Так CALayersяк невагоміші UIView.

Щоб створити загальний скелет для Mac та iOS, дотримуйтесь дизайн для вашої програми за допомогою CALayers. Оскільки він доступний в обох платформах.

UIViewмають такі функції, як сенсорні події, досягнуті за допомогою представників -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStartяк події та інші UIKitфункції

Для роботи з CALayersвикористанням знань Core Graphics. Для будь-якого простого відображення перегляду UIViewдостатньо.


0

Велика різниця полягає в тому, що UIView розроблений для CocoaTouch на мобільному пристрої. Він додає деякий обробник подій, який CALayer не надав.


0

UIView: Перегляди мають складніші ієрархічні схеми. Вони можуть отримувати взаємодії з користувачами, такі як крани, щипки, кліпи тощо. Робота з UIViews відбувається в основному потоці, це означає, що вона використовує живлення процесора.

CALayer: Шари з іншого боку мають більш просту ієрархію. Це означає, що вони швидше розв’язуються та швидше малюють на екрані. Немає накладних нападів на відміну від представлень. Шари малюються безпосередньо на GPU. Це відбувається на окремому потоці, не обтяжуючи процесор.

Детальніше: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.