2010-04-13 18 views

Respuesta

9

El generador de interfaz no es compatible con imágenes elásticas.

-(void) viewDidLoad { 
    [super viewDidLoad]; 
    [myImageView setImage:[[myImageView image] stretchableImageWithLeftCapWidth:5 topCapHeight:5 ]]; 
} 
+0

'El constructor de interfaz no admite imágenes estirable. == Lo siento, pero hace. La parte 'Stretching' toma este rol, mencionado en mi Answer below – samthui7

2

Esto es actualmente (a partir de la versión 4.5) una limitación de InterfaceBuilder. Sin embargo, tener que crear un IBOutlet para cada botón y especificar manualmente que la imagen es estirable en viewDidLoad no es una gran solución, aunque solo sea por hacer que la UI sea más engorrosa y quebradiza.

En lugar de eso, creemos una subclase UIButton que siempre hará que cualquier imagen de fondo sea estirable de forma predeterminada. En este ejemplo, solo extiendo la imagen de fondo normal y resaltada. Para una clase preparada para producción, probablemente desee verificar todos los estados de imágenes de fondo y en primer plano y estirarlas.

@implementation NTSTButton 

- (id) initWithCoder:(NSCoder *)aDecoder { 

    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     /* There is no support in IB for stretchable images. So, let's 
      make sure _any_ background image assigned to this button 
      stretches correctly. 
      Note: Setting the stretch cap to 10px, which should work with 
      almost all button background images. 
     */ 
     UIImage *normalImage = 
       [[self backgroundImageForState:UIControlStateNormal] 
         stretchableImageWithLeftCapWidth:10 topCapHeight:10] ; 

     UIImage *highlightedImage = 
       [[self backgroundImageForState:UIControlStateHighlighted] 
         stretchableImageWithLeftCapWidth:10 topCapHeight:10] ; 

     [self setBackgroundImage:normalImage 
       forState:UIControlStateNormal]; 

     [self setBackgroundImage:highlightedImage 
       forState:UIControlStateHighlighted]; 
    } 
    return self; 
} 

@end 
+0

+1 gracias por la dirección – Brenden

0

similares a @answerbot, pero actualizado para iOS 5.0+ como stretchableImageWithLeftCapWidth:topCapHeight: ahora es obsoleto.

@implementation UIButtonStretchable 

- (id) initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self setBackgroundImage: [[self backgroundImageForState:UIControlStateNormal] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:UIControlStateNormal]; 
     [self setBackgroundImage: [[self backgroundImageForState:backgroundImageForState:UIControlStateHighlighted] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:backgroundImageForState:UIControlStateHighlighted]; 
    } 
    return self; 
} 
@end 
0

Use Stretching de templates en View Sección.

  • Antes que nada, cambie el modo de vista a Aspect fill.

  • Luego edite el campo X, Y, Ancho, Altura en Stretching parte. Por ejemplo: Digamos que usted tiene un 10x20 tamaño de la imagen, y quiere encajar en un tamaño de 5x10 vista ==> Set X = 5/10 = 0,5, Y = 10/20 = 0,5

NOTA: IB no le permite usar una imagen más pequeña para "estirar" en un marco más grande, por lo que necesita diseñar su imagen lo más grande posible

Cuestiones relacionadas