2012-07-31 12 views
19

Ho un CALayer e voglio aggiungervi un'immagine estensibile. Se io faccio solo:Come aggiungere UIImage estensibile in CALayer.contents?

 _layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage; 

non funzionerà in quanto contentGravity predefinita gli strati è kCAGravityResize.

Ho letto che questo potrebbe essere realizzato utilizzando il contentCenter ma non riesco a capire come esattamente lo userò per ottenere l'immagine allungata nel mio CALayer.

Tutte le idee sono ben accette!

Horatiu

risposta

33

La risposta a questa domanda è questa. Diciamo che hai un'immagine estensibile che si estende solo in larghezza e ha l'altezza fissa (per ragioni di semplicità).

L'immagine è 31px larghezza (15 px dimensioni fisse - non allungare -, 1px sarà allungata)

Supponendo che il vostro livello è un CALayer sottoclasse il metodo init dovrebbe assomigliare a questa:

- (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; 
} 

come da documentazione il contenutoCentro rettangolo deve avere valori tra 0-1.

Per impostazione predefinita, il rettangolo dell'unità (0.0,0.0) (1.0,1.0) consente di ridimensionare l'intera immagine. Se il rettangolo si estende al di fuori del rettangolo unitario, il risultato non è definito.

Questo è tutto. Speriamo che qualcun altro lo trovi utile e risparmierà del tempo di sviluppo.

+0

L'ho trovato utile. Grazie! – duci9y

+1

È preferibile utilizzare la scala dell'immagine. –

+6

La soluzione suggerita non funzionerà su iPhone 6 plus se non è presente alcuna variante @ 3x dell'immagine. È meglio usare la proprietà di scala dell'immagine. 'self.contentScale = strechableImage.scale' Quindi funzionerà anche se non sono presenti tutte le varianti dell'immagine (@ 2x @ 3x). –