Quali sono le differenze tra un UIView e un CALayer?


103

Entrambi hanno la maggior parte degli stessi attributi, entrambi supportano diversi tipi di animazioni, entrambi rappresentano dati diversi. Quali sono le differenze tra un UIView e un CALayer?

Risposte:


224

Su iOS, ogni UIView è supportata da un Core Animation CALayer, quindi hai a che fare con CALayer quando usi un UIView, anche se potresti non rendertene conto. A differenza di NSViews su Mac, che si è evoluto prima che esistesse Core Animation, le UIViews sono intese come wrapper leggeri attorno a questi CALayer.

Come ho descritto nella domanda simile "Quando usare CALayer su Mac / iPhone?" , lavorare direttamente con CALayers non offre vantaggi significativi in ​​termini di prestazioni rispetto a UIViews. Uno dei motivi per cui potresti voler creare un elemento dell'interfaccia utente con CALayers invece di UIViews è che può essere facilmente trasferito su Mac. Le UIViews sono molto diverse da NSView, ma i CALayer sono quasi identici sulle due piattaforme. Questo è il motivo per cui il framework Core Plot presenta i suoi grafici utilizzando CALayer invece di altri elementi dell'interfaccia utente.

Una delle cose che UIViews fornisce su CALayers è il supporto integrato per l'interazione dell'utente. Gestiscono l'hit-testing sui tocchi e altre azioni correlate che dovresti creare da solo se gestisci una gerarchia di CALayer. Non è così difficile implementarlo da soli, ma è un codice extra che dovresti scrivere quando costruisci un'interfaccia solo CALayer.

Spesso sarà necessario accedere ai livelli sottostanti per una UIView quando si eseguono animazioni più complesse di quelle consentite dalla classe UIView di base. Le capacità di animazione di UIView sono cresciute con la maturazione dell'SDK iOS, ma ci sono ancora alcune cose che è meglio fare interagendo con il CALayer sottostante.


40

Dal blog di Ray Wenderlich ( tutorial )

I CALayer sono semplicemente classi che rappresentano un rettangolo sullo schermo con contenuto visivo. "Ma aspetta un maledetto minuto", potresti dire, "è a questo che servono le UIViews!" È vero, ma c'è un trucco in questo: ogni UIView contiene un livello radice a cui attinge!


33

In parole semplici, UIView eredita da UIResponder, gestisce gli eventi degli utenti, contiene CALayer, che eredita da NSObject, si concentra principalmente sul rendering, l'animazione ecc.


7

UIViewè un contenitore per CALayers. Utilizzando UIKit.

CALayerdove disegniamo i contenuti. utilizzandoCoreGraphics

Se lavori con funzioni come il controllo personalizzato, sarebbe fantastico andare avanti con una vista singola contenente più livelli per un rendering nativo accurato. Dal momento che CALayerssono senza peso di UIView.

Per creare uno scheletro comune per Mac e iOS, segui il design per la tua app usando CALayers. Poiché è disponibile su entrambe le piattaforme.

UIViewavere funzionalità come eventi touch ottenuti utilizzando delegati -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStartcome eventi e altre UIKitfunzionalità.

Per lavorare CALayersusa la conoscenza di Core Graphics, per ogni semplice visualizzazione UIViewè sufficiente.


0

La grande differenza è che UIView è progettato per CocoaTouch su dispositivo mobile. Aggiunge alcuni gestori di eventi che CALayer non ha fornito.


0

UIView: le viste hanno layout gerarchici più complessi. Possono ricevere interazioni dell'utente come tocchi, pizzichi, clik e altro. Lavorare con UIViews avviene sul thread principale, significa che utilizza la potenza della CPU.

CALayer: i livelli d'altra parte hanno una gerarchia più semplice. Ciò significa che sono più veloci da risolvere e più veloci da disegnare sullo schermo. Non vi è alcun overhead della catena di risponditori a differenza delle visualizzazioni. I livelli vengono disegnati direttamente sulla GPU. Succede su un thread separato senza gravare sulla CPU.

Per maggiori dettagli: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.