2011-10-19 16 views

Respuesta

195

En iOS, cada UIView está respaldado por un CALayer Core Animation, por lo que se trata de CALayers cuando se utiliza un UIView, aunque es posible que no se dé cuenta. A diferencia de las NSViews en Mac, que evolucionaron antes de que existiera Core Animation, las UIViews pretenden ser envoltorios livianos alrededor de estos CALayers.

Como describo en la pregunta similar "When to use CALayer on the Mac/iPhone?", trabajar directamente con CALayers no le ofrece ventajas de rendimiento significativas sobre UIViews. Una de las razones por las que puede querer construir un elemento de interfaz de usuario con CALayers en lugar de UIViews es que se puede portar muy fácilmente a la Mac. Los UIView son muy diferentes de NSViews, pero los CALayers son casi idénticos en las dos plataformas. Esta es la razón por la cual el marco de Trazado principal presenta sus gráficos utilizando CALayers en lugar de otros elementos de la IU.

Una cosa que UIViews proporciona sobre CALayers es el soporte integrado para la interacción del usuario. Se encargan de las pruebas de golpe en toques y otras acciones relacionadas que necesitaría construir usted mismo si administra una jerarquía de CALayers. No es tan difícil implementarlo usted mismo, pero es un código adicional que necesitaría escribir al construir una interfaz solo de CALayer.

A menudo tendrá que acceder a las capas subyacentes de una UIView cuando realice animaciones más complejas de lo que permite la clase base UIView. Las capacidades de animación de UIView han crecido a medida que el SDK de iOS ha madurado, pero todavía hay algunas cosas que se hacen mejor interactuando con el CALayer subyacente.

35

Desde el blog de Ray Wenderlich (Tutorial)

CALayers son simplemente clases que representan un rectángulo en la pantalla con contenido visual. "Pero esperen un minuto", pueden decir, "¡eso es para lo que son UIViews!" . Eso es verdad, pero hay un truco para eso: ¡cada UIView contiene una capa de raíz que atrae!

+1

Una buena respuesta artística. –

+0

¡Excelente respuesta corta! –

22

En pocas palabras, UIView hereda de NSResponder, controlar eventos de usuarios, contiene CALayer, que hereda de NSObject, se centran principalmente en el renderizado, animación, etc.

0

La gran diferencia está UIView está diseñado para Cocoa Touch en el dispositivo móvil. Agrega algún controlador de eventos que CALayer no proporcionó.

6

UIView es un contenedor para CALayers. Usando UIKit.

CALayer donde dibujamos los contenidos. Usando CoreGraphics

Si trabaja con funciones de control personalizado, sería genial seguir adelante con la vista única que contiene más capas para una representación nativa precisa. Desde CALayers son menos de UIView.

Para crear un esqueleto común para Mac e iOS, siga el diseño de su aplicación usando CALayers. Dado que está disponible en ambas plataformas.

UIView tener función como eventos de toque consigue utilizando delegados -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStart como eventos y otras características UIKit.

Para trabajar con CALayers utilice el conocimiento de Core Graphics. Para cualquier vista simple, la representación UIView es suficiente.

Cuestiones relacionadas