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.
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)
[self.view sendSubviewToBack:leftPanelView];
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.
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];
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)
Dans Swift 4.2
self.view.sendSubviewToBack(leftPanelView)