2012-03-20 19 views
38

Quiero agregar una vista en mi barra de pestañas analógica en iOS y luego mostrarla con una animación que viene de atrás. Pero cuando uso mi código, la vista que debe venir detrás de mi barra de pestañas se superpone a mi barra de pestañas por un tiempo.Cómo agregar una vista detrás de otra vista en iOS

tab bar and a view that shows when tab bar button pressed

Este es mi código:

- (void)handlePressedButton { 
if (pressedButton.selected) { 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    CGAffineTransform transform1 = CGAffineTransformMakeTranslation(-196.0, 0.0); 
    CGAffineTransform transform2 = CGAffineTransformMakeTranslation(0.0, 0.0); 
    [leftPanelView setTransform:transform1]; 
    [movedView setTransform:transform2]; 
    [UIView commitAnimations]; 
    pressedButton.selected = NO; 
} 
else { 
    pressedButton.selected = YES; 
    if (leftPanelView) { 
     [leftPanelView removeFromSuperview]; 
     leftPanelView = nil; 
    } 
    CGRect viewFrame = CGRectMake(-196, 0, 236, 748); 
    leftPanelView = [[UIView alloc] initWithFrame:viewFrame]; 
    leftPanelView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"left-nav-content.png"]]; 

    // Code to populate leftPanelView according to what button is pressed. 
    [self populateLeftPanelView]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [self.view addSubview:leftPanelView]; 
    CGAffineTransform transform1 = CGAffineTransformMakeTranslation(236.0, 0.0); 
    CGAffineTransform transform2 = CGAffineTransformMakeTranslation(112.0, 0.0); 
    [leftPanelView setTransform:transform1]; 
    [movedView setTransform:transform2]; 
    [UIView commitAnimations]; 
} 

}

Aquí el leftPanelView es la opinión de que debe estar bajo una barra de pestañas. La vista movida es otra vista, que está a la derecha del panel izquierdo (no importa)

+0

Compruebe si esto funciona: [self.navigationController.view insertSubview: belowSubview: self.navigationController.navigationBar]; –

Respuesta

42

tratar sendSubviewToBack

[self.view sendSubviewToBack:leftPanelView]; 
+0

Acepto su respuesta, porque la envió después de 2 minutos, la publiqué. Creo que es justo – wzbozon

+6

Esto no responde la pregunta. Todo lo que hace es mover una vista a la parte posterior de la cadena de subvista. La respuesta a continuación de He Shiming es correcta. – Rickster

+0

Gracias por la respuesta. Funcionó para mí – Ramakrishna

4

Oh, encontré una solución yo mismo. Añadí después de esto:

[UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [self.view addSubview:leftPanelView]; 

esta línea:

[self.view sendSubviewToBack:leftPanelView]; 
106

Además addSubview, hay otros métodos que puede confiar para agregar su punto de vista:

– insertSubview:aboveSubview: 
– insertSubview:belowSubview: 
– insertSubview:atIndex: 

Puede controlar el índice (en realidad z-index u orden de capas) de la vista usando estos métodos.

+1

Para mí 'insertSubview: belowSubview:' ¡resolvió el problema! Thx –

+0

Esta debería ser la respuesta correcta. la respuesta anterior no responde a lo que se le preguntó. – MarkosDarkin

Cuestiones relacionadas