web-dev-qa-db-ja.com

iOSで他のビューの後ろにビューを追加する方法

IOSのタブバーアナログの下にビューを追加し、その背後からアニメーションで表示したいです。しかし、コードを使用すると、タブバーの後ろから表示されるビューがタブバーとしばらく重なります。

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

これは私のコードです:

- (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は、タブバーの下にある必要があるビューです。移動したビューは別のビューで、左パネルの右側にあります(気にしないでください)

44
wzbozon

try sendSubviewToBack

[self.view sendSubviewToBack:leftPanelView];
52
ader

addSubviewの他に、ビューを追加するために信頼できる他のメソッドがあります。

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

これらのメソッドを使用して、ビューのインデックス(実際にはz-index、またはレイヤーの順序)を制御できます。

118
He Shiming

スイフト5

挿入ビュービュー階層内の別のビュー:

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)
11
xmasalov

ああ、自分で解決策を見つけました。私はこの後に追加しました:

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

この行:

[self.view sendSubviewToBack:leftPanelView];
5
wzbozon

In Swift 5

self.view.sendSubviewToBack(leftPanelView)
2
Vinoth Vino

Objective-C

挿入ビュービュー階層内の別のビュー:

- (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;
0
xmasalov

別の素晴らしいアイデアは、サブビューにtagを与えることです。

スイフト

mainView.addSubView(topView)
mainView.addSubView(bottomView)

topView.tag = 2

mainView.insertSubview(bottomView, belowSubview: mainView.viewWithTag(2))
0
myra