ios - ¿Cómo agregar UIImage estirable en el CALayer.contents?
ios5 quartz-core (1)
Tengo un CALayer y quiero agregarle una imagen estirable. Si acabo de hacer:
_layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage;
no funcionará ya que el valor por defecto de la capa es kCAGravityResize.
He leído que esto podría lograrse con el contentsCenter, pero parece que no puedo entender cómo lo usaría exactamente para lograr la imagen estirada en mi CALayer.
¡Cualquier idea es bienvenida!
Horatiu
La respuesta a esta pregunta es esta. Digamos que usted tiene una imagen estirable que se extiende solo en anchura y tiene la altura fija (por simplicidad).
La imagen es de 31 píxeles de ancho (15 píxeles de tamaño fijo, no se estira, se estirará 1 píxeles)
Suponiendo que su capa es una subclase CALayer, su método de inicio debería tener este aspecto:
- (id)init
{
self = [super init];
if (self) {
UIImage *stretchableImage = (id)[UIImage imageNamed:@"stretchableImage.png"];
self.contents = (id)stretchableImage.CGImage;
self.contentsScale = [UIScreen mainScreen].scale; //<-needed for the retina display, otherwise our image will not be scaled properly
self.contentsCenter = CGRectMake(15.0/stretchableImage.size.width,0.0/stretchableImage.size.height,1.0/stretchableImage.size.width,0.0/stretchableImage.size.height);
}
return self;
}
Según la documentación, el rectángulo de contentsCenter debe tener valores entre 0-1.
El valor predeterminado es el rectángulo unitario (0.0,0.0) (1.0,1.0) que resulta en la escala de la imagen completa. Si el rectángulo se extiende fuera del rectángulo unitario, el resultado no está definido.
Eso es todo. Con suerte, alguien más lo encontrará útil y le ahorrará tiempo de desarrollo.