web-dev-qa-db-fra.com

Comment ajouter une vue derrière une autre vue dans iOS

Je veux ajouter une vue sous ma barre d'onglets analogique dans iOS, puis l'afficher avec une animation venant de derrière. Mais lorsque j'utilise mon code, la vue qui doit venir de derrière ma barre de tabulation chevauche celle-ci pendant un certain temps. 

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

Ceci est mon code: 

- (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];
}

}

Ici, leftPanelView est la vue qui doit apparaître sous une barre de tabulation. La vue déplacée est une autre vue, située à droite du panneau de gauche (cela ne vous dérange pas)

43
wzbozon

try sendSubviewToBack

[self.view sendSubviewToBack:leftPanelView];
48
ader

Outre addSubview, il existe d'autres méthodes sur lesquelles vous pouvez compter pour ajouter votre vue:

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

Vous pouvez contrôler l'index (en fait, l'indice z ou l'ordre des couches) de la vue à l'aide de ces méthodes.

117
He Shiming

Oh, j'ai trouvé une solution moi-même. J'ai ajouté après cela: 

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

cette ligne: 

[self.view sendSubviewToBack:leftPanelView];
5
wzbozon

Rapide

Insérer une vue ci-dessous une autre vue dans la hiérarchie des vues:

view.insertSubview(subview1, belowSubview: subview2)

Insérer une vue ci-dessus une autre vue dans la hiérarchie des vues:

view.insertSubview(subview1, aboveSubview: subview2)

Insérer une sous-vue à l'index spécifié :

view.insertSubview(subview, at: index)

Déplacer la sous-vue spécifiée pour qu'elle apparaisse derrière ses frères et sœurs:

subview1.sendSubviewToBack(subview2)

Déplacer la sous-vue spécifiée pour qu'il apparaisse en haut de ses frères et soeurs

subview1.bringSubviewToFront(subview2)

Echange les sous-vues aux indices spécifiés :

view.exchangeSubview(at: index1, withSubviewAt: index2)
5
xmasalov

Dans Swift 4.2  

self.view.sendSubviewToBack(leftPanelView)
1
Vinoth Vino