2009-12-24 9 views
6

De acuerdo con los documentos de Mac Dev Center, debería poder establecer la propiedad de contenido de un CALayer y hacer que se represente automáticamente. Sin embargo, todavía no puedo obtener una imagen simple para mostrar agregando una subcapa a la raíz de UIView más tarde. Probé con diferentes variaciones; esto es lo que tengo hasta ahora:iPhone: ¿Cómo agrego capas a la capa raíz de UIView para mostrar una imagen con la propiedad de contenido?

(Nota: sé que hay otras formas de renderizar imágenes; para mis propósitos, me gustaría usar CALayer para algunas de las cosas más complicadas que voy a hacer).

(en viewDidDisplay() de la 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); 

Alguien sabe lo que estoy haciendo mal?

Gracias!

+0

Gracias Ben, lo tienes. Mi problema era el contenido. Rect era demasiado grande, no me di cuenta de que era un espacio de coordinación de unidad. Curiosamente, la imagen se coloca arriba y hacia la izquierda (solo veo la parte inferior derecha 1/4) - Tengo que ajustar la posición para que la esquina superior izquierda de la imagen quede en la parte superior- esquina derecha de la pantalla. Gracias! –

Respuesta

0

No es necesario para establecer el contentsRect (y si lo hace, que debe estar en la unidad de espacio de coordenadas, probablemente sólo CGRectMake(0, 0, 1.0, 1.0).

Es posible que desee establecer el layer 's position propiedad.

5

se podría cargar la imagen en un UIImageView, que se decended de UIView y por lo tanto tiene su propia propiedad de capa.

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

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

es necesario crear dos CALayer. se trata de manera perfecta de exhibir º e imagen dentro de 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]; 

Creo que es la solución a su problema.

Cuestiones relacionadas