Sto provando un po 'di tempo per far visualizzare un'immagine in uno CALayer.contents
. Sembra piuttosto semplice, ma non riesco a ottenere l'immagine da renderizzare, non importa quello che faccio. Il CALayer
viene visualizzato correttamente in quanto posso vedere il suo colore di sfondo e il raggio dell'angolo, ma l'immagine non verrà caricata.Disegnare un oggetto UII in CALayer.contents non esegue il rendering dei dati di immagine
Quello che state vedendo qui è una sottoclasse CAGradientLayer
con una maschera applicata. Il quadrato interno è il punto in cui vorrei che l'immagine venga mostrata e viene aggiunto come sottolivello della sottoclasse CAGradientLayer
.
Il codice per impostare questo è piuttosto semplice. In init
:
self.imageLayer = [CALayer layer];
self.imageLayer.cornerRadius = kDefaultCornerRadius;
self.imageLayer.backgroundColor = [UIColor darkGrayColor].CGColor;
[self addSublayer:self.imageLayer];
poi in seguito, ho impostato l'immagine:
- (void)setImage:(UIImage *)image {
self.imageLayer.contents = (id)image.CGImage;
[self.imageLayer setNeedsDisplay];
}
Infine, entro setFrame
:
CGFloat imageSize = self.bounds.size.width - 2*kDefaultMargin;
[self.imageLayer setBounds:CGRectMake(0.0, 0.0, imageSize, imageSize)];
[self.imageLayer setPosition:CGPointMake(self.bounds.size.width/2.0f, kDefaultMargin + imageSize/2.0f)];
[self.imageLayer setNeedsDisplay];
Le cose che già conoscono o hanno controllato:
- Il livello è obv è stato aggiunto correttamente in quanto visibile.
- L'immagine è stata aggiunta e funziona.
[UIImage imageNamed:@"info.png"]
viene utilizzato altrove nel codice e in realtà mostra e immagine. È 16x16 a 1x e 32x32 a 2x - Il codice viene chiamato nell'ordine logico corretto:
init
,setImage:
,setFrame
;
Cosa sta succedendo qui?
Stessi problemi e soluzioni come in [questa domanda] (http://stackoverflow.com/q/10060912/1218876). Non chiamare '[self.imageLayer setNeedsDisplay]'. –
In effetti, per favore, fai una risposta, non un commento, quindi posso accettarlo. – coneybeare