La transition animée UIViewController échoue dans iOS8

J'ai une transition personnalisée UIViewController – dans iOS7, cela fonctionne parfaitement bien.

Cependant, lorsqu'il est exécuté sur iOS 8, je rencontre des problèmes. Plus précisément, lorsque le controller de vue présenté est rejeté, la vue du controller de vue d'origine disparaît complètement – me laissant avec un écran complètement vide. Voici mon code:

@implementation DDCardTransition - (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext { return 0.5f; } - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; CGRect endFrame = self.destinationFrame; if (self.presenting) { fromViewController.view.userInteractionEnabled = NO; toViewController.view.layer.cornerRadius = 6.0f; UIView *tintAdjustmentView = [UIView new]; tintAdjustmentView.frame = fromViewController.view.frame; tintAdjustmentView.backgroundColor = [UIColor blackColor]; tintAdjustmentView.alpha = 0.f; [transitionContext.containerView addSubview:fromViewController.view]; [transitionContext.containerView addSubview:tintAdjustmentView]; [transitionContext.containerView addSubview:toViewController.view]; CGRect startFrame = endFrame; startFrame.origin.y += [UIScreen mainScreen].bounds.size.height; toViewController.view.frame = startFrame; [CATransaction begin]; [CATransaction setCompletionBlock:^{ [transitionContext completeTransition:YES]; }]; CABasicAnimation *frameAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; frameAnimation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.1f :0.8f :0.0 :1.0]; frameAnimation.duration = [self transitionDuration:transitionContext]; frameAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(CGRectGetMidX(startFrame), CGRectGetMidY(startFrame))]; frameAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(CGRectGetMidX(endFrame), CGRectGetMidY(endFrame))]; toViewController.view.layer.position = [frameAnimation.toValue CGPointValue]; [toViewController.view.layer addAnimation:frameAnimation forKey:@"position"]; CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; opacityAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; opacityAnimation.duration = 0.3f; opacityAnimation.fromValue = @(0.f); opacityAnimation.toValue = @(0.5f); tintAdjustmentView.layer.opacity = [opacityAnimation.toValue floatValue]; [tintAdjustmentView.layer addAnimation:opacityAnimation forKey:@"opacity"]; [CATransaction commit]; } else { toViewController.view.userInteractionEnabled = YES; UIView *tintAdjustmentView = [UIView new]; tintAdjustmentView.frame = toViewController.view.frame; tintAdjustmentView.backgroundColor = [UIColor blackColor]; tintAdjustmentView.alpha = 0.5f; [transitionContext.containerView addSubview:toViewController.view]; [transitionContext.containerView addSubview:tintAdjustmentView]; [transitionContext.containerView addSubview:fromViewController.view]; endFrame.origin.y += [UIScreen mainScreen].bounds.size.height; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ fromViewController.view.frame = endFrame; tintAdjustmentView.alpha = 0.f; } completion:^(BOOL finished) { [transitionContext completeTransition:YES]; }]; } } @end 

Une idée de pourquoi cela ne fonctionne plus dans iOS8?

Merci!

le code suivant fonctionne bien dans xcode GM:

 func animateTransition(transitionContext: UIViewControllerContextTransitioning!) { let fromViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) let fromViewControllerView = transitionContext.viewForKey(UITransitionContextFromViewKey) let containerView = transitionContext.containerView() fromViewControllerView?.frame = transitionContext.finalFrameForViewController(fromViewController!) fromViewControllerView?.frame.origin.y = containerView.bounds.height containerView.addSubview(fromViewControllerView!) UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0.0, options: .AllowUserInteraction, animations: { fromViewControllerView!.center.y = containerView.bounds.size.height/2 }, completion: { (completed: Bool) -> Void in transitionContext.completeTransition(completed) } ) 

}