IOSのタブバーアナログの下にビューを追加し、その背後からアニメーションで表示したいです。しかし、コードを使用すると、タブバーの後ろから表示されるビューがタブバーとしばらく重なります。
これは私のコードです:
- (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];
}
}
ここで、leftPanelViewは、タブバーの下にある必要があるビューです。移動したビューは別のビューで、左パネルの右側にあります(気にしないでください)
[self.view sendSubviewToBack:leftPanelView];
addSubview
の他に、ビューを追加するために信頼できる他のメソッドがあります。
– insertSubview:aboveSubview:
– insertSubview:belowSubview:
– insertSubview:atIndex:
これらのメソッドを使用して、ビューのインデックス(実際にはz-index、またはレイヤーの順序)を制御できます。
挿入ビュー下ビュー階層内の別のビュー:
view.insertSubview(subview1, belowSubview: subview2)
挿入ビュー上記ビュー階層内の別のビュー:
view.insertSubview(subview1, aboveSubview: subview2)
挿入サブビュー指定されたインデックスで:
view.insertSubview(subview, at: index)
移動指定されたサブビューが表示されるように後ろ兄弟:
subview1.sendSubviewToBack(subview2)
移動指定したサブビューが表示されるようにします上兄弟:
subview1.bringSubviewToFront(subview2)
Exchangeサブビュー指定されたインデックスで:
view.exchangeSubview(at: index1, withSubviewAt: index2)
ああ、自分で解決策を見つけました。私はこの後に追加しました:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[self.view addSubview:leftPanelView];
この行:
[self.view sendSubviewToBack:leftPanelView];
In Swift 5
self.view.sendSubviewToBack(leftPanelView)
挿入ビュー下ビュー階層内の別のビュー:
- (void)insertSubview:(UIView *)subview1
belowSubview:(UIView *)subview2;
挿入ビュー上記ビュー階層内の別のビュー:
- (void)insertSubview:(UIView *)subview1
aboveSubview:(UIView *)subview2;
挿入サブビュー指定されたインデックスで:
- (void)insertSubview:(UIView *)view
atIndex:(NSInteger)index;
移動指定されたサブビューが表示されるように後ろ兄弟:
- (void)sendSubviewToBack:(UIView *)view;
移動指定したサブビューが表示されるようにします上兄弟:
- (void)bringSubviewToFront:(UIView *)view;
Exchangeサブビュー指定されたインデックスで:
- (void)exchangeSubviewAtIndex:(NSInteger)index1
withSubviewAtIndex:(NSInteger)index2;
別の素晴らしいアイデアは、サブビューにtagを与えることです。
スイフト
mainView.addSubView(topView)
mainView.addSubView(bottomView)
topView.tag = 2
mainView.insertSubview(bottomView, belowSubview: mainView.viewWithTag(2))