我正在使用容器视图作为两个子视图的超视图。我想将一个子视图“翻转”到另一个子视图。第一个子视图恰好是空白,第二个子视图是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];
}
答案 0 :(得分: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];
}
答案 1 :(得分: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
中,所以也许这是可见的视图?目前还不清楚你编写的代码是怎么回事。
您是否可以使用可见的“主要”视图的名称更新您的问题,以及您希望在转换前看到哪些子视图?然后转换后可见的“主要”视图是什么,以及过渡后您希望看到哪些超级视图?
当你说翻转正在发生时,你可能会看到一些翻转的东西,但它可能不是你期望翻转的视图吗?这可能导致您无法在翻转后看到子视图吗?为什么你说你看不到子视图,复数?我读到的内容听起来像你只希望在翻转完成后看到标签。
答案 2 :(得分:0)
我可以在您的代码中看到您已将两个子视图添加到主视图中。转换步骤很好,并且没有错误地发生。如果你想要一个视图转换到另一个视图我建议你删除第一个视图,然后添加你想要的过渡效果的第二个视图,然后再从superview中删除你当前的视图,如果你想要的功能,请添加你的第一个视图另外显示两个视图。