2

我使用容器视图作为两个子视图的超级视图。我想将一个子视图“翻转”到另一个子视图。第一个子视图恰好是空白的,第二个子视图是UILabel有一些文本的。

翻转正在发生,但我没有看到我的子视图。

我想过渡blankLabelViewlabelToTransition. 有任何想法吗?谢谢!

编码:

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

3 回答 3

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];
}
于 2012-01-09T10:22:32.767 回答
1

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

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

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

于 2012-01-09T06:20:22.397 回答
0

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

于 2012-01-11T06:46:46.737 回答