transitionFromViewController中的动画:toViewController:没有显示

时间:2012-12-06 22:21:01

标签: ios core-animation

我正在尝试构建一个自定义容器视图控制器,并尝试创建自己的动画。我开始简单地将点击的单元格移动到屏幕的中心,然后通过缩放和显示新视图进行放大。我从这开始:

- (void)showDetailViewController:(UIView *)viewToAnimate {
    UIImageView *anImageView = [[UIImageView alloc] initWithImage:[self screenShot:_homeViewController.view]];


    CGRect windowBounds = [[UIScreen mainScreen] bounds];
    _detailViewController.view.frame = windowBounds;
    [self addChildViewController:_detailViewController];

    // get a screenshot of the old view before pushing the new view controller

    _detailViewController.view.alpha = 0.0;
    NSLog(@"center: %@", NSStringFromCGPoint(viewToAnimate.center));
    [self transitionFromViewController:_homeViewController toViewController:_detailViewController duration:0.5 options:0 animations:^{

        CGPoint windowCenter = CGPointMake(CGRectGetMidX(windowBounds), CGRectGetMidY(windowBounds));
        viewToAnimate.center = windowCenter;            
    viewToAnimate.layer.transform = CATransform3DMakeScale(2, 2, 2);

            NSLog(@"center 2 : %@", NSStringFromCGPoint(viewToAnimate.center));
        _detailViewController.view.alpha = 1.0;

    }completion:^(BOOL finished) {
        [anImageView removeFromSuperview];
    }];

    [_detailViewController didMoveToParentViewController:self];
}

我不明白的是,如果我注释掉_detailViewController.view.alpha = 0和_detailViewController.view.alpha = 1,我就不会得到任何动画。它只是跳转到新的childViewController。但是有了这两行,我确实看到了动画。这是为什么?感谢。

编辑: 这就是我设置容器控制器的方法: 在ContainerViewController的viewDidLoad中:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
_homeViewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
_homeViewController.homeViewControllerDelegate = self;
_detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];

[self setSubViewControllers:@[ _homeViewController, _detailViewController]];

_selectedViewController.view.frame = [[UIScreen mainScreen] bounds];
[self addChildViewController:self.selectedViewController];
[self.view addSubview:_selectedViewController.view];
[self didMoveToParentViewController:self];

1 个答案:

答案 0 :(得分:0)

在您发布的代码中,您显示自己将_detailViewController添加为子视图控制器,但不显示将_homeViewController添加为self的子视图控制器的步骤。在您发布的代码执行时,_homeViewController是self的子级(正在运行转换的视图控制器)?它需要。