Quais são as diferenças entre um UIView e um CALayer?

103

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?

Oleg Danu
fonte

Respostas:

224

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.

Brad Larson
fonte
40

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!

Esteira
fonte
33

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.

Forrest
fonte
7

UIViewé um contêiner para CALayers. Usando UIKit.

CALayeronde 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 CALayerssã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.

UIViewtendo recursos como eventos de toque obtidos usando delegados -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStartcomo eventos e outros UIKitrecursos.

Para trabalhar, CALayersuse o conhecimento do Core Graphics. Para qualquer renderização de visualização simples, UIViewbasta.

Gobi M
fonte
0

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.

musixlemon
fonte
0

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

Anit Kumar
fonte