Ich habe eine böse Zeit versucht, ein Bild zu bekommen, um in einer CALayer.contents
zu zeigen. Es scheint ziemlich geradlinig, aber ich kann das Bild nicht rendern, egal was ich mache. Die CALayer
wird gut wiedergegeben, da ich die Hintergrundfarbe und den Eckenradius sehen kann, aber das Bild wird nicht geladen.Zeichnen eines UIImage in CALayer.contents rendern keine Bilddaten
Was Sie hier sehen, ist eine CAGradientLayer
Unterklasse mit einer angelegten Maske. Das innere Quadrat ist, wo ich möchte, dass das Bild angezeigt wird, und es wird als Unterschicht der Unterklasse CAGradientLayer
hinzugefügt.
Der Code zum Einrichten ist ziemlich einfach. In init
:
self.imageLayer = [CALayer layer];
self.imageLayer.cornerRadius = kDefaultCornerRadius;
self.imageLayer.backgroundColor = [UIColor darkGrayColor].CGColor;
[self addSublayer:self.imageLayer];
Dann später, habe ich das Bild:
- (void)setImage:(UIImage *)image {
self.imageLayer.contents = (id)image.CGImage;
[self.imageLayer setNeedsDisplay];
}
Schließlich innerhalb 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];
Dinge, die ich bereits kennen oder haben geprüft:
- Die Schicht ist obv richtig hinzugefügt, da es sichtbar ist.
- Das Bild wird hinzugefügt und funktioniert.
[UIImage imageNamed:@"info.png"]
wird an anderer Stelle im Code verwendet und zeigt und zeigt das Bild. Es ist 16x16 bei 1x und 32x32 bei 2x - Der Code wird in der richtigen logischen Reihenfolge aufgerufen:
init
,setImage:
,setFrame
;
Was geht hier vor?
Gleiches Problem und Lösung wie in [dieser Frage] (http://stackoverflow.com/q/10060912/1218876). Rufen Sie nicht '[self.imageLayer setNeedsDisplay]' auf. –
In der Tat, bitte machen Sie eine Antwort, kein Kommentar, damit ich es akzeptieren kann. – coneybeare