2011-06-19 10 views
9

No puedo encontrar la respuesta aquí de todos modos, ni veo una pregunta duplicada.Cómo hacer que una subvista complete su super visión

Mi código es simple. Dada 3 UIView, parent, from and to, quitar de padre y agregar subvista. + agregar animación, pero eso es solo tonterías.

Ahora, el problema es cuando hago eso, para luego compensarlo. Es como si fuera empujado hacia abajo.

Incluso agrego To.frame = ParentView.frame; para asegurarse de que funciona No es así

¿Qué debería haber hecho?

+ (void) AnimateSwitchingWithParent: (UIView *) ParentView From: (UIView *) From To: (UIView*) To 
{ 
    /*[UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:1.25]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 


    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:ParentView cache:YES];*/ 
    [From removeFromSuperview]; 
    [ParentView addSubview:To]; 

    To.frame=ParentView.frame; //If I don't do this, the subview is still off by around 20 points 
    NSLog(@"To.bounds: %@", NSStringFromCGRect(To.bounds)); 
    NSLog(@"From.bounds.: %@", NSStringFromCGRect(From.bounds)); 
    NSLog(@"ParentView.bounds: %@", NSStringFromCGRect(ParentView.bounds)); 


    //JA_DUMP (To.bounds); 
    //JA_DUMP (To.bounds); 



    /*[UIView commitAnimations];*/ 

} 

He encontrado la solución. Resulta que el marco de A es

To.frames: {{0, 0}, {320, 372}}

Sin embargo, si quito To.frame = ParentView.frame el marco es también

{{0, 20}, {320, 460}}

Me pregunto por qué? 20 puntos parecen ser la distancia de la barra de estado. ¿Dónde podemos establecer ese marco en InterfaceBuilder?

Establecí la barra de estado en ninguna en la sección SimulatedMetric.

+5

convenciones de Objective-C esperan variables que comienzan con una letra minúscula (mayúscula es para la clase/protocolo nombres solamente). Por favor, quédate con ellos. Tus (¿futuros?) Compañeros de trabajo te lo agradecerán. – Regexident

Respuesta

20

Parece que entiende mal el marco y los límites, revise su código a To.frame=ParentView.bounds; debería estar bien.

relacionadas: Why is there an frame rectangle and an bounds rectangle in an UIView?

+2

El punto es que el 'frame' está en las coordenadas de la supervista de la supervista. 'bounds' está en las coordenadas de la vista. Si usa 'frame' y la supervista se compensa dentro de su padre, esto no funcionará correctamente. –

0

Fix "20 points" diferencia por la cola en subvista y Vista en Swift:

To.frame = NSRect(origin: CGPoint(x: ParentView.bounds.origin.x, 
            y: ParentView.bounds.origin.y-20), 
        size: ParentView.bounds.size) 
Cuestiones relacionadas