UIView transitionFromView不在容器中设置动画

时间:2012-05-01 07:54:15

标签: ios animation uiview transition

我正在使用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

2 个答案:

答案 0 :(得分:1)

考虑将动画延迟到另一个运行循环,使用dispatch_after和performSelector:withObject:afterDelay:

或在添加子视图

后使用[CATransaction flush]

http://andrewmarinov.com/working-with-uiviews-transition-animations/

的更多信息

答案 1 :(得分:0)

我不知道为什么第一个有效,但这不是使用此方法的正确方法。正在转换的视图将从层次结构中删除,正在转换的视图将作为动画的一部分添加。因此,请跳过添加detailView(或使用UIViewAnimationOptionShowHideTransitionViews选项。