Анимация перехода UIView не показывает подпредставления - PullRequest
2 голосов
/ 01 января 2012

Я использую контейнерное представление как суперпредставление для двух подпредставлений. Я хочу "перевернуть" одно подпредставление в другое подпредставление. Первое подпредставление оказывается пустым, а второе подпредставлением является UILabel с некоторым текстом.

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

Я хочу перейти с 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 ]

3 голосов
/ 09 января 2012

вероятно, кадр UILabel установлен неправильно

try

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];
}
1 голос
/ 09 января 2012

В вашем методе 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, так что, может быть, это видимый вид?Непонятно, что происходит с кодом, как вы его написали.

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

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

0 голосов
/ 11 января 2012

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

...