Подтвердить что ты не робот

Как добавить представление за другим видом в 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 - это представление, которое должно находиться под панелью вкладок. Перемещенный вид - это другой вид, который находится справа от левой панели (не против)

4b9b3361

Ответ 1

попробуйте sendSubviewToBack

[self.view sendSubviewToBack:leftPanelView];

Ответ 2

Помимо addSubview, есть другие методы, на которые вы можете положиться, чтобы добавить ваше представление:

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

Вы можете управлять индексом (фактически z-index или порядком слоя) представления, используя эти методы.

Ответ 3

Swift 5

Вставьте представление под другим представлением в иерархии представлений:

view.insertSubview(subview1, belowSubview: subview2)

Вставьте представление выше другого представления в иерархии представлений:

view.insertSubview(subview1, aboveSubview: subview2)

Вставьте подпредставление по указанному индексу:

view.insertSubview(subview, at: index)

Переместите указанное подпредставление так, чтобы оно появилось за его братьями и сестрами:

subview1.sendSubviewToBack(subview2)

Переместите указанное подпредставление так, чтобы оно появилось поверх его братьев и сестер:

subview1.bringSubviewToFront(subview2)

Обмен подвидов по указанным показателям:

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

Ответ 4

О, я нашел решение самостоятельно. Я добавил после этого:

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

эта строка:

[self.view sendSubviewToBack:leftPanelView];

Ответ 5

В Свифт 5

self.view.sendSubviewToBack(leftPanelView)

Ответ 6

Другая хорошая идея состоит в том, чтобы дать подвиды тег.

стриж

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

topView.tag = 2

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

Ответ 7

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;

Обмен подвидов по указанным показателям:

- (void)exchangeSubviewAtIndex:(NSInteger)index1 
            withSubviewAtIndex:(NSInteger)index2;