Mam zły czas próbując uzyskać obraz, który pojawi się w CALayer.contents
. Wydaje się to dość proste, ale nie mogę sprawić, by obraz był renderowany bez względu na to, co robię. Model CALayer
wygląda dobrze, ponieważ widzę jego kolor tła i promień zaokrąglenia, ale obraz nie zostanie załadowany.Rysowanie UIImage w CALayer.contents nie renderuje danych obrazu
Co widzisz tutaj jest CAGradientLayer
podklasa z maską stosowane. Wewnętrzny kwadrat to miejsce, w którym chciałbym pokazać obrazek, i jest dodawany jako podwarstwa z podklasy CAGradientLayer
.
Kod do ustawienia jest dość prosty. W init
:
self.imageLayer = [CALayer layer];
self.imageLayer.cornerRadius = kDefaultCornerRadius;
self.imageLayer.backgroundColor = [UIColor darkGrayColor].CGColor;
[self addSublayer:self.imageLayer];
potem dalej, ustawić obraz:
- (void)setImage:(UIImage *)image {
self.imageLayer.contents = (id)image.CGImage;
[self.imageLayer setNeedsDisplay];
}
Wreszcie w 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];
Czego już znają lub Sprawdziłem:
- Warstwa jest obv juz dodany poprawnie poprawnie, ponieważ jest widoczny.
- Zdjęcie jest dodawane i działa.
[UIImage imageNamed:@"info.png"]
jest używany gdzie indziej w kodzie i faktycznie pokazuje i obraz. Jest to 16x16 przy 1x i 32x32 przy 2x - Kod jest wywoływany w prawidłowej kolejności logicznej:
init
,setImage:
,setFrame
;
Co tu się dzieje?
Ten sam problem i rozwiązanie, jak w [to pytanie] (http://stackoverflow.com/q/10060912/1218876). Nie wywołuj '[self.imageLayer setNeedsDisplay]'. –
Rzeczywiście, proszę, zróbcie odpowiedź, a nie komentarz, abym mógł to zaakceptować. – coneybeare