2012-03-20 2 views
38

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

+0

Проверьте, работает ли это: [self.navigationController.view insertSubview: belowSubview: self.navigationController.navigationBar]; –

ответ

42

попробовать sendSubviewToBack

[self.view sendSubviewToBack:leftPanelView]; 
+0

Я принимаю ваш ответ, потому что вы отправили его через 2 минуты, я отправил. Я думаю, это справедливо. – wzbozon

+6

Это не отвечает на заданный вопрос. Все это делает перемещение представления в обратную сторону подвижной цепи. Ответ ниже от He Shiming правильный. – Rickster

+0

Спасибо за ответ. Это сработало для меня. – Ramakrishna

4

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

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

эту строку:

[self.view sendSubviewToBack:leftPanelView]; 
106

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

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

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

+1

Для меня 'insertSubview: belowSubview:' решена проблема! Thx –

+0

Это должен быть правильный ответ. приведенный выше ответ не отвечает на то, что было задано. – MarkosDarkin

Смежные вопросы