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 aCGImage
.
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
- Propiedad de modo de contenido de una vista
- Dibujar un
UIImage
endrawRect
conCGContextDrawImage
- Tutorial CALayer: Primeros pasos
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