2011-12-31 60 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

这是一个帧的问题。两个标签的容器视图都有适当的框架设置。标签子视图没有。具体来说,我错误地设置了原点,以便它不出现在容器视图中。感谢您的建议! – 2012-01-11 17:10:07

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,所以也许这是可见的看法?目前还不清楚您编写代码时发生了什么。

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

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

0

,我可以在你的代码,你已经加入看到你的主视图的两个子视图。过渡步骤很好,没有错误发生。如果你想在另一个视图上转换,我建议你先删除第一个视图,然后添加第二个视图,然后再从超级视图中删除当前视图,如果你想要的功能如交替显示两个视图。