Pregunta

Puedo crear una UIImage a partir de una capa de animación central utilizando el siguiente código:

- (UIImage*)contentsImage;
{
   UIGraphicsBeginImageContext([self bounds].size);
   [self renderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return image;
}

Este código está en mi clase derivada de Calayer. El problema con el que me encuentro es que tengo dos capas de efectivo que son capas infantiles de mi capa que no se representan con la imagen resultante. Si agrego calayers estándar como niños, se vuelven bien. Los documentos de Apple dicen:

Rendera el receptor y sus subcapas en el contexto especificado.

También dice que ha estado disponible desde iPhone OS 2.0. Me pregunto si hay algo que me falta o si debería presentar un radar.

¿Alguna idea de lo que podría evitar que los hijos de los niños se sientan atraídos por la imagen?

Gracias.

¿Fue útil?

Solución

La maquinaria de Calayer llama a RenderInstext para crear su propiedad de contenido con mapa de bits. Pero en un Cashapelayer, la propiedad de la ruta no se presenta en su contenido como se ve por esta nota en el encabezado:

La forma en su conjunto se compone entre el contenido de la capa y su primera subcape.

Es lógico que RenderIncontext en realidad no represente la ruta Cashapelayer en su contexto. Sin embargo, en realidad no he probado esto para mí.

Otros consejos

No sé si es relevante para usted, pero hay una nota en la documentación de Calayer para RenderInContext que dice:

**Important**: The Mac OS X v10.5 implementation of this method does not
support the entire Core Animation composition model. QCCompositionLayer, 
CAOpenGLLayer, and QTMovieLayer layers are not rendered. Additionally,
layers that use 3D transforms are not rendered, nor are layers that specify 
backgroundFilters, filters, compositingFilter, or a mask values. 
Future versions of Mac OS X may add support for rendering these layers
and properties.

De todos modos, me encontré con un problema similar al usar la función UIView DrawRect junto con el dibujo en un contexto de imagen. El UIView general que contenía subvistas no dibujaría sus subvistas si llamara a DrawRect (lo que ahora tiene sentido ahora, ya que dice en la documentación si llama a DrawRect, usted es responsable de llenar toda esa área independientemente de las implementaciones de Super y Subview). Resolví mi problema solo llamado dibujo en todas mis subvistas, pasándolas sus propios marcos.

Entonces, ¿sugeriría tal vez cambiar de renderInstext y usar el Drawincontext de Calayer en su lugar? Deberá anular el método ya que no hace nada de manera predeterminada. Sus subclases también deberán mover los contextos a sus marcos apropiados. También para estar seguro, es posible que desee verificar que ninguno de los códigos que agrega afecte la representación normal de estas capas.

Presenté un radar en esto. No puedo ver ninguna razón en los documentos de que no debería funcionar. Responderé aquí si Apple responde al radar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top