Risposte:
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.
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!
UIView
è un contenitore per CALayers
. Utilizzando UIKit
.
CALayer
dove 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 CALayers
sono 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.
UIView
avere funzionalità come eventi touch ottenuti utilizzando delegati -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
, tochesStart
come eventi e altre UIKit
funzionalità.
Per lavorare CALayers
usa la conoscenza di Core Graphics, per ogni semplice visualizzazione UIView
è sufficiente.
La grande differenza è che UIView è progettato per CocoaTouch su dispositivo mobile. Aggiunge alcuni gestori di eventi che CALayer non ha fornito.
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