estirar una image como android nine-patch?

Método UIImage :

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight .

Aquí, el área extensible se fuerza a ser de un solo píxel alto / ancho.

No puedo configurar el área estirable, así que quiero saber: ¿hay una categoría UIImage para hacer eso?

Después de search en Google, encontré una lib.

Pregunta: ¿Hay un cargador de nueve parches para iPhone?

Anuncio: http://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

http://i.stack.imgur.com/Rc6my.png

Esta es una image fuente, y quiero estirar el rectángulo gris interior.

Gracias por adelantado.

Una forma de lograr esto es usar el siguiente enfoque,

 UIImage * backgroundImg = [UIImage imageNamed:@"bg.png"]; backgroundImg = [backgroundImg resizableImageWithCapInsets:UIEdgeInsetsMake(2,2, 2, 2)]; [imgView setImage: backgroundImg]; 

UIEdgeInsetsMake (2,2, 2, 2) es la cantidad de píxeles que desea que no se puedan estirar.

Puede lograr nueve parches con el software Tortuga22.

Puedes encontrar la fuente de este GitHub aquí.

Úselo de esta manera

 [btnSubmit setImage: [TUNinePatchCache imageOfSize:[btnSubmit bounds].size forNinePatchNamed:@"imgNormalBackground"] forControlState:UIControlStateNormal]; 

A partir de iOS5, puede usar resizableImageWithCapInsets: para lograr esto.

No quería cargar tanto código para las simples imágenes de 9 parches que teníamos. Entonces, de todos modos, aquí hay una solución simple al problema para los interesados. Es algo difícil de codificar para nuestras regiones de ttwig de 3 píxeles, pero puede ajustarlas fácilmente a sus necesidades o encontrarlas en la image con algún código básico y usarlas en lugar de mis parameters de inserción de código fijo.

 + (UIImage *) makeNinePatchImage:(UIImage *)image; { //Clear the black 9patch regions CGRect imageRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height); UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale); [image drawInRect:imageRect]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextClearRect(context, CGRectMake(0, 0, image.size.width, 1)); CGContextClearRect(context, CGRectMake(0, 0, 1, image.size.height)); image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIEdgeInsets insets; //hard coded for now, could easily read the black regions if necessary insets.left = insets.right = image.size.width / 2 - 1; insets.top = insets.bottom = image.size.height / 2 - 1; UIImage *nineImage = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch]; return nineImage; } 

Luego, para usarlo, digamos, el background de un button, simplemente llámalo así:

 [self.dummyButton setBackgroundImage:[EVUtility makeNinePatchImage:learnMoreImage] forState:UIControlStateNormal]; 

Hecho.

Si lo entiendo bien, quiere que el rectángulo crezca en longitud y altura. Si bien puede haber soluciones más eficientes, lo que podría sugerir es romper el límite en una unidad básica. Agregue esta image varias veces una al lado de la otra para formar el rectángulo de borde de la longitud y altura deseada. Luego, pinte el rectángulo interno con el color gris.