【问题标题】:UIView transition animation not showing subviewsUIView 过渡动画不显示子视图
【发布时间】:2012-01-31 05:27:16
【问题描述】:

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

【问题讨论】:

    标签: iphone ios uiview uiviewanimationtransition


    【解决方案1】:

    UILabel 的框架可能设置不正确

    试试

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

    翻页功能试试sn-p

    -(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];
    }
    

    【讨论】:

    • 框架有问题。两个标签的容器视图都正确设置了框架。标签子视图没有。具体来说,我错误地设置了原点,因此它没有出现在容器视图中。感谢您的建议!
    【解决方案2】:

    在你的 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 结尾,所以这可能是可见视图?不清楚您编写的代码发生了什么。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 2019-01-16
        • 1970-01-01
        • 2013-10-23
        • 1970-01-01
        相关资源
        最近更新 更多