2011-12-21 16 views
20

Estoy haciendo una aplicación para iPad, solo se admitirá el modo horizontal. Estoy teniendo un UIView y más tarde estoy agregando dinámicamente UIImageView como una subvista. Sin embargo, mi objetivo es agregar imágenes en el centro de UIView. Por lo que utiliza este código,UIView.center = UIImageView.center pero la vista de imagen no parece estar en el centro en el paisaje

[imageView setCenter:dynamicMainView.center]; 

donde imageView es UIImageView (obvio :)) y dynamicMainView es UIView, Sin embargo docente resultado final parece estar en el centro,

representación visual

enter image description here


Código de método completo para anuncio ding UIImageView en UIView es,

-(void) addImageIntoMainDynamicView:(UIImage *) image 
{ 
    [self clearImageFromMainDynamicView];//Always clear Dynamic main view before adding new views 
    imageView = [[UIImageView alloc] initWithImage:image]; 
     if(imageView.bounds.size.width > dynamicMainView.bounds.size.width || imageView.bounds.size.height > dynamicMainView.bounds.size.height) 
     { 
      [imageView setFrame:[dynamicMainView bounds]]; 
     } 

     [imageView setCenter:dynamicMainView.center]; 
     NSLog(@"Image : X = %f and Y = %f", imageView.center.x,imageView.center.y); 
     NSLog(@"UIView : X = %f and Y = %f", dynamicMainView.center.x,dynamicMainView.center.y); 
     [dynamicMainView addSubview:imageView]; 
    [imageView release]; 
} 

Y por encima del valor de registro es,

2011-12-21 21:07:11.850 Map1TestApp[94645:11603] Image : X = 512.000000 and Y = 371.500000 
2011-12-21 21:07:11.853 Map1TestApp[94645:11603] UIView : X = 512.000000 and Y = 371.500000 

Cualquier pista sobre por qué no es la adición en el centro? ¿Estoy haciendo algo mal?


PARA FUTURAS espectador la anwser fue:

[imageView setCenter:CGPointMake(CGRectGetMidX([dynamicMainView bounds]), CGRectGetMidY([dynamicMainView bounds]))]; 

Respuesta

20

El center de un punto de vista se expresa en que es supervista del sistema de coordenadas. Entonces, está centrando su vista de imagen en el sistema de coordenadas incorrecto. (supervista de vista dinámica en oposición a vista dinámica)

Para la vista central A en la vista B, el punto de vista central A debe ser el centro del rectángulo de vista bounds B. Puede obtenerlo usando (desde la memoria!) CGRectGetMidX y CGRectGetMidY.

+0

Así que no lo dudes, antes de obtener un Frame bound, que es una pantalla completa en lugar de un espacio UIView (Rect)? Pero ahora me estoy centrando en el CGRect de UIView? ¿Tengo razón? – doNotCheckMyBlog

+1

Sí, eso es todo. bounds es el tamaño de la vista en el propio sistema de coordenadas de vistas (origen 0,0). El marco es el tamaño de la vista, pero el origen es el punto en el sistema de coordenadas de la supervista donde está la esquina superior izquierda. La propiedad central está en el sistema de coordenadas de la supervista. – jrturton

0

Debe comprobar el tamaño de la imagen. El marco de la imagen puede no ser el marco del UIImageView. Establezca el color de fondo del UIImageView en algo como [UIColor redColor] y clipToBounds en verdadero y vea qué sucederá. Si hay partes rojas que son visibles, el problema es con la propiedad contentMode de su objeto imageView.

+0

Sí, lo he comprobado antes jajaja, estuvo bien, pero la sugerencia de jrturton funcionó. He publicado un fragmento que resolvió mi problema :) – doNotCheckMyBlog

Cuestiones relacionadas