我正在尝试构建一个自定义容器视图控制器,并尝试创建自己的动画。我开始简单地将点击的单元格移动到屏幕的中心,然后通过缩放和显示新视图进行放大。我从这开始:
- (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];
答案 0 :(得分:0)
在您发布的代码中,您显示自己将_detailViewController添加为子视图控制器,但不显示将_homeViewController添加为self的子视图控制器的步骤。在您发布的代码执行时,_homeViewController是self的子级(正在运行转换的视图控制器)?它需要。