UIView transitionFromView 在容器中没有动画
Posted
技术标签:
【中文标题】UIView transitionFromView 在容器中没有动画【英文标题】:UIView transitionFromView not animating in container 【发布时间】:2012-05-01 07:54:15 【问题描述】:我正在使用 UIView transitionFromView 在两个视图之间切换。我目前正在 UIView 子类中执行以下操作:
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];
imgView.frame = CGRectMake(0, 0, 100, 100);
UIView *detailView = [[UIView alloc] initWithFrame:imgView.frame];
detailView.backgroundColor = [UIColor redColor];
detailView.frame = imgView.frame;
[self addSubview:imgView];
[UIView transitionFromView:imgView toView:detailView duration:1.0
options:UIViewAnimationOptionTransitionFlipFromLeft
completion:^(BOOL finished)
];
这按预期工作。过渡按其应有的方式执行。问题是我需要在包含先前代码的视图的子视图中进行转换。所以,我把所有东西都放在一个容器中,并尝试对其进行动画处理:
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];
imgView.frame = CGRectMake(0, 0, 100, 100);
UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
UIView *detailView = [[UIView alloc] initWithFrame:imgView.frame];
detailView.backgroundColor = [UIColor redColor];
detailView.frame = imgView.frame;
[container addSubview:imgView];
[self addSubview:container];
[UIView transitionFromView:imgView toView:detailView duration:1.0
options:UIViewAnimationOptionTransitionFlipFromLeft
completion:^(BOOL finished)
];
但在这种情况下,动画不会运行。相反,我只看到没有过渡的最终结果。谁能帮我弄清楚这两种情况有何不同?
这里描述了同样的问题,但我认为现有的“解决方案”不足以完全描述这种行为。 Transition behavior using transitionFromView and transitionWithView
【问题讨论】:
【参考方案1】:考虑将动画延迟到另一个运行循环,使用 dispatch_after 和 performSelector:withObject:afterDelay:
或在添加子视图后使用 [CATransaction flush]
更多信息http://andrewmarinov.com/working-with-uiviews-transition-animations/
【讨论】:
【参考方案2】:我不知道为什么第一个有效,但这不是使用此方法的正确方法。被转换离开的视图将从层次结构中移除,并且被转换到的视图将作为动画的一部分添加。所以跳过添加 detailView(或使用UIViewAnimationOptionShowHideTransitionViews 选项。
【讨论】:
更改了问题以反映这一点——我注意到它不会以某种方式产生影响...... 这很奇怪,因为我做同样的事情而且效果很好。唯一的区别是我保持对两个视图的引用都处于活动状态,以便我可以切换回来。所以我唯一可以推荐的另一件事是为每个视图保留一个 iVar 引用。在这段代码之后你没有做任何其他事情吗? 不。过渡是最后一件事。完成块也是空的。我将容器和子视图更改为强 iVar,但仍然得到相同的结果。以上是关于UIView transitionFromView 在容器中没有动画的主要内容,如果未能解决你的问题,请参考以下文章
UIView transitionFromView 在容器中没有动画
+[UIView transitionFromView:toView:...] 有多个视图
使用 transitionFromView:toView:duration:options:completion 但使用 addSubview 时,电影没有在横向模式下正确显示