2011-12-31 4 views
2

Я использую представление контейнера в качестве супервизора для двух подзонов. Я хочу «перевернуть» одно подзаголовок на другое подвью. Первое подвью считается пустым, а второе подвью - UILabel, имеющее некоторый текст.анимация перехода UIView, не отображающая подпункты

Флип происходит, но я не вижу своих подзонов.

Я хочу перейти blankLabelView в labelToTransition. Есть идеи? Благодаря!

Код:

-(void)viewDidLoad { 
    CGRect labelFrame = CGRectMake(100.0, 217.0, 125.0, 34.0); 

    self.labelContainerView = [[UIView alloc] initWithFrame:labelFrame]; 
    // If I change the background color to something other than clear 
    // I can see that this view is flipping, otherwise it appears that 
    // nothing happens. 
    self.labelContainerView.backgroundColor = [UIColor clearColor]; 
    [self.someSuperview addSubview:self.labelContainerView]; 

    UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.lineBreakMode = UILineBreakModeWordWrap; 
    label.numberOfLines = 2; 
    label.textAlignment = UITextAlignmentCenter; 
    self.labelToTransition = label; 

    UIView *blankView = [[UIView alloc] initWithFrame:labelFrame]; 
    blankView.backgroundColor = [UIColor clearColor]; 
    self.blankLabelView = blankView; 
} 

-(void)viewWillAppear { 
    self.labelToTransition.text = @"some text from a model object"; 

    [self.labelContainerView addSubview:self.blankLabelView]; 
} 

-(void)flipViewAnimation { 
    UIView *containerView = self.labelContainerView; 

    [UIView transitionWithView:containerView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromBottom 
       animations:^{ 
        [self.blankLabelView removeFromSuperview]; 
        [containerView addSubview:self.labelToTransition]; 
       } 
       completion:NULL]; 
} 

ответ

3

вероятно кадр UILabel не установлен должным образом

попробовать

CGRect labelFrame = CGRectMake(0, 0.0, 125.0, 34.0); 

Для функции листать попробовать следующий фрагмент

-(void)LetUsFlip 
{ 
[UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:flipContainerView cache:YES]; 

    if ([self.blankLabelView superview]) 
    { 
     [self.blankLabelView removeFromSuperview]; 
     [self.labelContainerView addSubview:self.labelToTransition]; 
     [self.labelContainerView sendSubviewToBack:self.blankLabelView]; 
    } 
    else 
    { 
     [self.labelToTransition removeFromSuperview]; 
     [self.labelContainerView addSubview:self.blankLabelView]; 
     [self.labelContainerView sendSubviewToBack:self.labelToTransition]; 
    } 

    [UIView commitAnimations]; 
} 
+0

Это была проблема с рамой. В представлении контейнера для обеих этикеток был установлен фрейм. Подзаголовка меток не сделала. В частности, я неправильно задавал исход, чтобы он не отображался внутри представления контейнера. Спасибо за ваше предложение! –

1

В вашем методе viewDidLoad у вас есть

[self.someSuperview addSubview:self.labelContainerView]; 

в вашем viewWillAppear у вас есть

[self.labelContainerView addSubview:self.blankLabelView]; 

Тогда в вашей анимации вы имеете

[self.blankLabelView removeFromSuperview]; 
[containerView addSubview:self.labelToTransition]; 

labelToTransition (label) not added to any view 

Я не использовал этот эффект перехода раньше, но я пытаюсь понять иерархию вида:

Первоначально (viewDidLoad и viewWillAppear) somSuperView | __> labelToContainerView

labelContainerView 
|__>blankLabelView 

Затем через анимация

containerView == labelContainerView 
|__>labelToTransition (label) 

blankLabelView no longer in a view 

Первое, что я хотел бы сказать, это ваш код очень трудно следовать. Какой вид является видимым видом? Предполагаем ли мы, что это someSuperView? Похоже, что ярлык заканчивается в containerView, так что, возможно, это видимый вид? Непонятно, что происходит с кодом, как вы его написали.

Можете ли вы обновить свой вопрос с именем видимого «основного» вида и того, какие подпункты вы ожидаете увидеть до перехода? И затем, каково видимое «основное» представление после перехода, и какие наблюдения вы ожидаете увидеть после перехода?

Когда вы говорите, что флип происходит, может быть, вы видите, что что-то переворачивается, но это могут быть не те взгляды, которые вы ожидаете перевернуть? Может ли это объяснить, что вы не сможете увидеть подпункты после флип? И почему вы говорите, что вы не можете видеть subviews, множественное число? То, что я читаю, звучит так, будто вы только ожидаете увидеть ярлык после того, как ваш флип сделан.

0

Как я могу видеть в своем коде, который вы уже добавлен оба ваших подсмотра на ваш основной вид. Шаги перехода прекрасны и происходят без ошибок.Если вам нужен переход одного вида на другой, я предлагаю вам удалить первый, а затем добавить второе представление с требуемым эффектом перехода, а затем снова удалить текущее представление из супервизора и добавить обратно свой первый вид, если вы хотите, чтобы функции, подобные показать два взгляда альтернативно.

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