Ответ 1
попробуйте sendSubviewToBack
[self.view sendSubviewToBack:leftPanelView];
Я хочу добавить представление под моим аналоговым ящиком в 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 - это представление, которое должно находиться под панелью вкладок. Перемещенный вид - это другой вид, который находится справа от левой панели (не против)
попробуйте sendSubviewToBack
[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)
Обмен подвидов по указанным показателям:
view.exchangeSubview(at: index1, withSubviewAt: index2)
О, я нашел решение самостоятельно. Я добавил после этого:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[self.view addSubview:leftPanelView];
эта строка:
[self.view sendSubviewToBack:leftPanelView];
В Свифт 5
self.view.sendSubviewToBack(leftPanelView)
Другая хорошая идея состоит в том, чтобы дать подвиды тег.
стриж
mainView.addSubView(topView)
mainView.addSubView(bottomView)
topView.tag = 2
mainView.insertSubview(bottomView, belowSubview: mainView.viewWithTag(2))
Вставьте представление под другим представлением в иерархии представлений:
- (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;