繁体   English   中英

UIView过渡动画不显示子视图

[英]UIView transition animation not showing subviews

我使用容器视图作为两个子视图的超级视图。 我想将一个子视图“翻转”到另一个子视图。 第一个子视图碰巧是空白,第二个子视图是一个带有一些文本的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];
}

可能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];
}

在您的viewDidLoad方法中

[self.someSuperview addSubview:self.labelContainerView];

在您看来将出现

[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 ,所以也许那是可见的视图? 目前尚不清楚代码编写过程中发生了什么。

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

当您说正在发生翻转时,可能是您看到了翻转的东西,但是可能不是您希望翻转的视图? 能否为您解释一下翻转后无法查看子视图? 又为什么说看不到子视图,复数呢? 我读到的声音听起来像是您只希望在翻转后即可看到标签。

正如我在您的代码中看到的那样,您已经将两个子视图都添加到了主视图中。 过渡步骤很好,并且没有错误。 如果您想将一个视图过渡到另一个视图,我建议您删除第一个视图,然后添加具有所需过渡效果的第二个视图,然后再次从超级视图中移除当前视图,并在需要时添加回到第一个视图交替显示两个视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM