1

カスタム コンテナ ビュー コントローラを構築しようとしており、独自のアニメーションを作成しようとしています。タップしたセルを画面の中央に移動してから、スケーリングして新しいビューを表示することでズームインするという簡単なことから始めています。私はこれから始めています:

- (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 にジャンプするだけです。しかし、これらの 2 行でアニメーションが表示されます。何故ですか?ありがとう。

編集:これは、コンテナコントローラーをセットアップする方法です: 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];
4

1 に答える 1

0

投稿したコードでは、_detailViewController を子ビュー コントローラーとして追加していることを示していますが、_homeViewController を自分の子ビュー コントローラーとして追加する手順は示していません。投稿していただいたコードを実行した時点で、_homeViewControllerはself(トランジションを実行しているView Controller)の子ですか?そうである必要があります。

于 2012-12-07T01:58:33.787 に答える