AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola, os cuento, he creado una vista personalizada que añado a mi vista principal:

    vistaPers = [[CustomView alloc] initWithFrame:vistaPers.frame];
    vistaPers.backgroundColor = [UIColor blueColor];
    [self.view addSubview:vistaPers];
    [vistaPers release];

la cuestión es la siguiente al añadirla me aparece en la parte superior izquierda de la pantalla, y necesito que aparezca en una posicion diferente, he leído que es porq la propiedad bounds se fija a (0,0) por defecto y que las coordenadas de frame y bounds son distintas, la vista personalizada tiene los metodos de deteccion de toques (touchbegan...), y mi pregunta es la siguiente como puedo cambiar de posicion la vista y que coincidan frame y bounds.

(he encontrado esto: frame.origin = center - bounds.size/2, pero la verdad no se como utilizarlo)

gracias.

preguntado 11 Ene '12, 11:03

isis_87's gravatar image

isis_87
100212832

reetiquetada 11 Ene '12, 13:57

ManueGE's gravatar image

ManueGE
3.8k284268


Tu error podria estar en drawImage.frame = self.frame

Si el self.frame tiene el origin.x o el origin.y diferente de 0 , el drawImage tambien sera desplazado dentro del vistaPers.

lo que creo que quieres hacer es:

drawImage.frame = CGRectMake(0.f,0.f,self.frame.size.width,self.frame.size.height);

tener en cuenta que el sistema de coordenadas de drawImage y el vistaPers son diferentes.

enlace permanente

respondido 11 Ene '12, 17:28

StaS's gravatar image

StaS
5.1k953

StaS mil gracias, efectivamente el error era ese estaba tomando mal el sistema de coordenadas de drawImage, ahora el tema esta en conseguir que no me salga un enorme cuadro negro y se vea la configuracion que le doy en Interface Builder, le he creado un IBOutlet para VistaPers (IBOutlet CustomView *vistaPers;) y así q sea mas sencillo introducir imagenes etc, pero no sale la configuracion, lo he unido mediante el file`s owner del viewController que maneja la vista pero no parece funcionar.

(11 Ene '12, 17:51) isis_87

sorry , no entiendo nada. (cuadros negros, configuraciones...?) Es otra pregunta o es la misma?

(11 Ene '12, 17:58) StaS

para vistaPers que es de tipo CustomView (hereda de uiview y es la clase que tiene el initWithFrame), quiero que cargue un .xib determinado para poder colocar mas facilmente los elementos graficos (botones, imagenes, ...), el IBOutlet CustomView *vistaPers; lo tengo en el ViewController y en su .xib tengo la vistaPers unida mediante IB. Es decir:

   ViewController
             |
             |--->UIView (vistaPrincipal)
             |--->CustomView (unido a ese IBOutlet vistaPers)

Mientras que CustomView tiene .h y .m, y quiero que dependiendo de una comprobacion de un valor en el viewController se cargue para CustomView uno u otro .xib

(12 Ene '12, 09:25) isis_87

Frame y Bounds son dos cosas diferentes: Frame es el rectángulo donde se encuentra la vista, con un origen determinado y un tamaño concreto. Bounds, sin embargo, es un rectángulo del mismo tamaño que el frame cuyo origen está en el 0, 0. Por tanto, esto que dices de como hacer que coincidan frame y bounds no tiene mucho sentido: sólo coincidirán si el origen de tu vista es el punto 0, 0 de su superview.

Por otra parte, ¿dónde has definido el frame de vistaPers que utilizas en la inicialización? Lo que deberías comprobar es el valor de origen que tiene vistaPers.frame, porque seguramente sea 0, 0 y por eso te aparece en la esquina superior izquierda.

Yo haría lo siguiente:

CGRect frame = CGRectMake (origenX, origenY, vistaPers.size.width, vistaPers.size.heigth);
vistaPers = [[CustomView alloc] initWithFrame:frame];

Donde origenX y origenY son las coordenadas del origen que deseas.

Saludos.

enlace permanente

respondido 11 Ene '12, 13:55

ManueGE's gravatar image

ManueGE
3.8k284268

la definicion de frame que tengo es: vistaPers.frame=CGRectMake(40.,40.,200,200);

consigo que la vista se sitúe donde quiero pero cuando se detectan los toques es como que lo hace desplazado tanto en el eje X como en el Y, la vista personalizada se encarga de dibujar lo que dibuja el usuario con el dedo, el codigo de initWithFrame en vistaPers.m es el siguiente:

  • (id)initWithFrame:(CGRect)frame {

    NSLog(@"initWithFrame....");

    self = [super initWithFrame:frame]; if (self) { // Initialization code. drawImage = [[UIImageView alloc] initWithImage:nil]; drawImage.frame = self.frame; [self addSubview:drawImage]; mouseMoved = 0; } return self; }

VistaPers tiene ese metodo mas los metodos de tratamiento de toques, nose si el problema es que la vista personalizada dibuja siguiendo sus coordenadas y por eso en la vista principal aparecen las cosas desplazadas. Alguna idea?

y gracias por responder.

(11 Ene '12, 16:15) isis_87

Hola de nuevo, no se que pasa pero no soy capaz de cargar para mi vista personalizada un .xib, alguien me puede decir mas o menos como puedo hacerlo teniendo initWithFrame como metodo de inicializacion o como unir en el ViewController una vista del tipo de mi CustomView y no tener que ajustar por codigo todo el contenido de la vista. gracias adelantadas.

enlace permanente

respondido 13 Ene '12, 17:17

isis_87's gravatar image

isis_87
100212832

si usas .xib's tienes que usar initWithCoder , no initWithFrame

(13 Ene '12, 19:15) StaS

perdon por la ignorancia pero no entiendo como se utiliza initWithCoder para cargar un xib, ni lo q debo implementar en dicho metodo, yo creía q initWithCoder era mas para cosas de archivado.

(14 Ene '12, 16:39) isis_87
Tu respuesta:
Activar/desactivar vista previa

Sobre esta pregunta

Etiquetas de la pregunta:

×54
×7
×3

Pregunta realizada el: 11 Ene '12, 11:03

Pregunta visitada: 673 veces

Última modificación: 14 Ene '12, 16:39

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Realizar Donación