[英]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.