Ambos têm quase os mesmos atributos, ambos suportam diferentes tipos de animações, ambos representam dados diferentes. Quais são as diferenças entre um UIView e um CALayer?
No iOS, cada UIView é apoiado por um Core Animation CALayer, então você está lidando com CALayers ao usar um UIView, mesmo que não perceba. Ao contrário dos NSViews no Mac, que evoluíram antes de existir o Core Animation, os UIViews foram projetados para serem invólucros leves em torno desses CALayers.
Conforme descrevo na pergunta semelhante "Quando usar o CALayer no Mac / iPhone?" , trabalhar diretamente com CALayers não oferece vantagens significativas de desempenho em relação ao UIViews. Um dos motivos pelos quais você pode querer construir um elemento de interface do usuário com CALayers em vez de UIViews é que ele pode ser facilmente transferido para o Mac. UIViews são muito diferentes de NSViews, mas CALayers são quase idênticos nas duas plataformas. É por isso que a estrutura Core Plot apresenta seus gráficos usando CALayers em vez de outros elementos de interface do usuário.
Uma coisa que os UIViews fornecem sobre CALayers é o suporte integrado para interação do usuário. Eles lidam com testes de acerto em toques e outras ações relacionadas que você mesmo precisaria criar se gerenciasse uma hierarquia de CALayers. Não é tão difícil implementar isso sozinho, mas é um código extra que você precisa escrever ao construir uma interface exclusiva do CALayer.
Freqüentemente, você precisará acessar as camadas subjacentes de um UIView ao executar animações mais complexas do que permite a classe base UIView. Os recursos de animação do UIView aumentaram conforme o iOS SDK amadureceu, mas ainda há algumas coisas que podem ser feitas melhor interagindo com o CALayer subjacente.
Do blog de Ray Wenderlich ( Tutorial )
CALayers são simplesmente classes que representam um retângulo na tela com conteúdo visual. “Mas espere um minuto”, você pode dizer, “é para isso que servem os UIViews!” Isso é verdade, mas há um truque para isso: cada UIView contém uma camada raiz para a qual é desenhada!
Simplesmente falando, UIView herda de UIResponder, manipula eventos de usuários, contém CALayer, que herda de NSObject, principalmente se concentra em renderização, animação etc.
UIView
é um contêiner para CALayers
. Usando UIKit
.
CALayer
onde desenhamos o conteúdo. UsandoCoreGraphics
Se você trabalha com controles personalizados, como recursos, seria ótimo prosseguir com a visualização única contendo mais camadas para renderização nativa precisa. Uma vez que CALayers
são mais leves do que UIView
.
Para criar um esqueleto comum para Mac e iOS, siga o design do seu aplicativo usando CALayers
. Uma vez que está disponível em ambas as plataformas.
UIView
tendo recursos como eventos de toque obtidos usando delegados -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
, tochesStart
como eventos e outros UIKit
recursos.
Para trabalhar, CALayers
use o conhecimento do Core Graphics. Para qualquer renderização de visualização simples, UIView
basta.
A grande diferença é que o UIView é projetado para CocoaTouch no dispositivo móvel. Ele adiciona algum manipulador de eventos que CALayer não forneceu.
UIView: as visualizações têm layouts de hierarquia mais complexos. Eles podem receber interações do usuário como toques, beliscões, cliques e muito mais. Trabalhar com UIViews acontece na thread principal, significa que está usando a energia da CPU.
CALayer: As camadas, por outro lado, têm uma hierarquia mais simples. Isso significa que eles são mais rápidos de resolver e de desenhar na tela. Não há sobrecarga da cadeia de resposta ao contrário das visualizações. As camadas são desenhadas diretamente na GPU. Isso acontece em um thread separado sem sobrecarregar a CPU.
Para mais detalhes: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5