Zeichnung eines UIImage in CALayer.Inhalt nicht Rendern von Bilddaten

Ich bin eine böse Zeit versucht, ein Bild zu zeigen, bis in eine CALayer.contents. Es scheint ziemlich geradlinig, aber ich Schaffe es nicht, das Bild zu Rendern, egal was ich mache. Die CALayer macht es in Ordnung, wie ich sehen kann, seine Hintergrundfarbe und Eckenradius, aber das Bild wird nicht geladen.

Zeichnung eines UIImage in CALayer.Inhalt nicht Rendern von Bilddaten

Was Sie hier sehen, ist ein CAGradientLayer Unterklasse mit einer Maske angewendet. Das innere Quadrat ist, wo ich möchte, dass das Bild zu zeigen, und es wird Hinzugefügt, als eine Unterebene der CAGradientLayer Unterklasse.

Den code, um dies einzurichten 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 überprüft zu haben:

  1. Die Ebene ist offensichtlich korrekt Hinzugefügt zeigen, dass es sichtbar ist.
  2. Dem Bild Hinzugefügt wird und funktioniert. [UIImage imageNamed:@"info.png"] verwendet wird, an anderer Stelle im code und zeigt tatsächlich und Bild. Es ist 16x16 1x und 32x32 auf 2x
  3. Der code aufgerufen wird, in der richtigen logischen Reihenfolge: init, setImage:, setFrame;

Was ist hier Los?

  • Gleiches problem und Lösung, wie in diese Frage. Rufen Sie nicht [self.imageLayer setNeedsDisplay].
InformationsquelleAutor coneybeare | 2012-06-10
Schreibe einen Kommentar