UIView过渡动画不显示子视图

时间:2011-12-31 22:12:13

标签: iphone ios uiview uiviewanimationtransition

我正在使用容器视图作为两个子视图的超视图。我想将一个子视图“翻转”到另一个子视图。第一个子视图恰好是空白,第二个子视图是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 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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中,所以也许这是可见的视图?目前还不清楚你编写的代码是怎么回事。

您是否可以使用可见的“主要”视图的名称更新您的问题,以及您希望在转换前看到哪些子视图?然后转换后可见的“主要”视图是什么,以及过渡后您希望看到哪些超级视图?

当你说翻转正在发生时,你可能会看到一些翻转的东西,但它可能不是你期望翻转的视图吗?这可能导致您无法在翻转后看到子视图吗?为什么你说你看不到子视图,复数?我读到的内容听起来像你只希望在翻转完成后看到标签。

答案 2 :(得分:0)

我可以在您的代码中看到您已将两个子视图添加到主视图中。转换步骤很好,并且没有错误地发生。如果你想要一个视图转换到另一个视图我建议你删除第一个视图,然后添加你想要的过渡效果的第二个视图,然后再从superview中删除你当前的视图,如果你想要的功能,请添加你的第一个视图另外显示两个视图。