1

UIViewControllerTransitioningDelegateUIViewControllerAnimatedTransitioningおよびを使用して、モーダルに表示されるビュー コントローラーのカスタム トランジションを作成しようとしていますUIPresentationController

私の提示ビューコントローラーUIViewControllerTransitioningDelegateでは、次のメソッドを実装して持っています。

-(id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
                                                              presentingController:(UIViewController *)presenting
                                                                  sourceController:(UIViewController *)source {

    return [[MyAnimationController alloc] initWithAnimationType:MyAnimationTypePresent];
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed {
    return [[MyAnimationController alloc] initWithAnimationType:MyAnimationTypeDismiss];
}

- (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented
                                                  presentingViewController:(UIViewController *)presenting
                                                      sourceViewController:(UIViewController *)source {

    return [[MyPresentationController alloc] initWithPresentedViewController:presented presentingViewController:presenting];
}

のサブクラスでUIPresentationController、提示されたビュー コントローラーの下に調光ビューを追加し、外観の遷移と共にフェードインしたいと考えています。

- (void)presentationTransitionWillBegin {
    self.dimmingView.alpha = 0.0f;
    [self.containerView insertSubview:self.dimmingView atIndex:0];
    [self.dimmingView autoPinEdgesToSuperviewEdges];

    [self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        self.dimmingView.alpha = 1.0f;
    }
                                                                    completion:nil];
}

- (void)dismissalTransitionWillBegin {

    [self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        self.dimmingView.alpha = 0.0f;
    }
                                                                    completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
                                                                        [self.dimmingView removeFromSuperview];                                                                 }];
}

興味深い (そして非常に苛立たしい) ことは、提示されたビュー コントローラーの提示と終了のアニメーションが期待どおりに動作し、.NET で実装されていることMyAnimationControllerです。私の調光ビューのフェードイン/フェードアウトに関しては、提示されたView Controllerを閉じるときにのみ機能します。それを提示するとき、フェードインはトランジションと一緒にアニメーション化されず、単に一定の時間を使用します。Apple のドキュメントといくつかのチュートリアルに従ってすべてを実装したと確信していますが、何らかの理由で期待どおりに動作しません。ここで問題が何であるかについて何か提案はありますか?

4

1 に答える 1

1

私はあなたがプレゼンテーションで を使いたいと思っているpresentingViewControllertransitionCoordinator思いpresentedViewConrollerますtransitionCoordinator。これが、現在実装されているように、解雇では機能しますが、プレゼンテーションでは機能しない理由です。

于 2016-10-24T17:24:35.783 に答える