ios uiimageview uiimage calayer subview

ios - agregar UIImage en CALayer



uiimageview subview (5)

Esta es una respuesta general por el bien de los futuros espectadores. Se basa en el título de la pregunta en lugar de los detalles de la pregunta original.

Cómo agregar un UIImage a un CALayer

Puede agregar una imagen a la layer una vista simplemente usando su propiedad de contents :

myView.layer.contents = UIImage(named: "star")?.cgImage

  • Tenga en cuenta que el UIImage debe convertirse a CGImage .

Si desea agregar la imagen en su propia capa, puede hacerlo así:

let myLayer = CALayer() let myImage = UIImage(named: "star")?.cgImage myLayer.frame = myView.bounds myLayer.contents = myImage myView.layer.addSublayer(myLayer)

Modificando la apariencia

El código anterior produce una vista como esta. El azul claro es el UIView y la estrella azul oscuro es el UIImage .

Como puede ver, sin embargo, parece pixelado. Esto se debe a que UIImage es más pequeño que UIView por lo que se escala para llenar la vista, que es lo predeterminado, no especificas nada más.

Los siguientes ejemplos muestran variaciones en el contentsGravity la capa Propiedad contentsGravity . El código se ve así:

myView.layer.contents = UIImage(named: "star")?.cgImage myView.layer.contentsGravity = kCAGravityTop myView.layer.isGeometryFlipped = true

En iOS, es posible que desee establecer la propiedad isGeometryFlipped en true si está haciendo algo con gravedad superior o inferior, de lo contrario será lo contrario de lo que esperaba. (Solo la gravedad se invierte verticalmente, no la representación del contenido. Si tiene problemas con el contenido volteado, consulte esta respuesta ).

Hay dos ejemplos de UIView continuación para cada configuración de contentsGravity UIView , una vista es más grande que el UIImage y la otra es más pequeña. De esta forma puedes ver los efectos de la escala y la gravedad.

kCAGravityResize

Este es el predeterminado.

kCAGravityResizeAspect

kCAGravityResizeAspectFill

kCAGravityCenter

kCAGravityTop

kCAGravityBottom

kCAGravityLeft

kCAGravityRight

kCAGravityTopLeft

kCAGravityTopRight

kCAGravityBottomLeft

kCAGravityBottomRight

Relacionado

Debo agregar un UIImageView como subvista de MapView. Para hacer esto, creé una capa encima de MapView. En esta capa quiero poner mi imagen, pero obtengo un rectángulo blanco y nada más. Mi imagen no es visible

Este es el código:

- (void)viewDidLoad { //...... CALayer *layer = [CALayer layer]; layer.backgroundColor = [[UIColor whiteColor] CGColor]; if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { layer.bounds = CGRectMake(self.mapView.bounds.origin.x, self.mapView.bounds.origin.y, 80, 300); } else { layer.bounds = CGRectMake(self.mapView.frame.origin.x, self.mapView.frame.origin.y, 150, 700); } layer.contents = (id)[UIImage imageNamed:@"myImage.png"]; //the name is correct but in the output the image is not visible [[self.mapView layer] addSublayer:layer]; [layer setNeedsDisplay]; }


Necesita establecer el marco del CALayer correctamente, porque el valor predeterminado es CGRectZero.


quite

[layer setNeedsDisplay];

No sé por qué, pero funciona!


tiene que ser

layer.contents = (id)[UIImage imageNamed:@"myImage.png"].CGImage;

Solo puedes poner una CGImage en una capa, no un UIImage directamente.


myView.layer.contents = UIImage (named: "star") ?. cgImage