2009-12-24 9 views
6

Zgodnie z dokumentacją Mac Dev Center, powinieneś mieć możliwość ustawienia właściwości treści CALayer i automatycznego renderowania. Jednak nadal nie mogę wyświetlić prostego obrazu, dodając podwarstwę do korzenia UIView później. Próbowałem wielu różnych odmian; Oto, co mam do tej pory:iPhone: Jak dodać warstwy do warstwy głównej UIView, aby wyświetlić obraz z właściwością content?

(Uwaga: Wiem, że istnieją inne sposoby renderowania obrazów, dla moich celów chciałbym użyć CALayer's dla niektórych bardziej skomplikowanych rzeczy, które zamierzam dostać).

(w viewDidDisplay() z ViewController):

CALayer *theLayer = [CALayer layer]; 
[[[self view] layer] addSublayer:theLayer]; 
theLayer.contents = (id)[[UIImage imageNamed:@"mypic.png"] CGImage]; 
theLayer.contentsRect = CGRectMake(0.0f, 0.0f, 300.0f, 300.0f); 
theLayer.bounds = CGRectMake(0.0f, 0.0f, 300.0f, 400.0f); 

ktoś wie co robię źle?

Dzięki!

+0

Dziękuję Ben - masz to. Mój problem polegał na tym, że contentRect był o wiele za duży - nie zdawałem sobie sprawy, że jest to jednostka współzależna. Co ciekawe, obraz jest umieszczony wysoko i po lewej (widzę tylko jego dolną prawą 1/4) - muszę dostosować położenie, aby lewy górny róg obrazu znalazł się na górze prawy róg ekranu. Dzięki! –

Odpowiedz

0

Nie trzeba ustawić contentsRect (i miejsca jeśli nie, powinien on być w jednostce koordynować, prawdopodobnie tylko CGRectMake(0, 0, 1.0, 1.0).

Możesz też ustawić layer „s position nieruchomość.

5

można załadować obraz do UIImageView, który jest decended z UIView i dlatego ma własną nieruchomość warstwa.

UIImageView *imgView = [[UIImageView alloc] initWithFrame:frame]; 
imgView.image = [UIImage imageNamed:@"mypic.png"]; 

[[[self view] layer] addSublayer:[imgView layer]]; 
[imgView release]; 
0

Musisz utworzyć dwa CALayer. jest to doskonały sposób, aby wyświetlić th obraz w ramach CALayer.

CALayer *pulseLayer_ = [[CALayer layer] retain]; 

pulseLayer_.backgroundColor = [[UIColor whiteColor] CGColor]; 
pulseLayer_.bounds = CGRectMake(0., 0., 80., 80.); 
pulseLayer_.cornerRadius = 12.; 
pulseLayer_.position = self.view.center; 

[self.view.layer addSublayer:pulseLayer_]; 


CALayer *imageLayer = [CALayer layer]; 

imageLayer.frame = pulseLayer_.bounds; 
imageLayer.cornerRadius = 10.0; 
imageLayer.contents = (id) [UIImage imageNamed:@"jacklogo.png"].CGImage; 
imageLayer.masksToBounds = YES; 

[pulseLayer_ addSublayer:imageLayer]; 

[pulseLayer_ setNeedsDisplay]; 

Myślę, że to rozwiązanie twojego problemu.

Powiązane problemy