title: UIViewControllerAnimatedTransitioning: Black screen fragments after rotation change
body: <p>I have created a Viewcontrollertransition and everything is working as long as I don't change the device orientation.</p>
  
  <p>Image 1 shows the screen as it should be. I then switch to the next viewcontroller where I change the orientation. Now I go back to first viewcontroller and again switch the orientation. Then I get the result visible in image 2. A black border appears.  Please don't mind the white box in the center of the screen.</p>
  
  <p>Below you find the code of my animation. Can you see what is wrong?</p>
  
  <pre><code>import Foundation
  
  import UIKit
  
  class ZoomOutCircleViewTransition: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate {
  
      var hideDelayed = false
      var transitionContext: UIViewControllerContextTransitioning?
  
      init(hideDelayed : Bool = true) {
          self.hideDelayed = hideDelayed
          super.init()
      }
  
  
      func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -&gt; NSTimeInterval {
          return 0.6
      }
  
      func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
          self.transitionContext = transitionContext
  
          guard let toViewController: UIViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) else {
              return
          }
  
          guard let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) else {
              return
          }
  
          guard let toViewTransitionFromView = toViewController as? TransitionFromViewProtocol else {
              return
          }
  
          let containerView = transitionContext.containerView()
  
          let imageViewSnapshot = toViewTransitionFromView.getViewForTransition()
          imageViewSnapshot.alpha = 0.0
          let imageViewSnapshotOriginalFrame = imageViewSnapshot.frame
  
          let startFrame = CGRectMake(-CGRectGetWidth(toViewController.view.frame)/2, -CGRectGetHeight(toViewController.view.frame)/2, CGRectGetWidth(toViewController.view.frame)*2, CGRectGetHeight(toViewController.view.frame)*2)
  
          let quadraticStartFrame = CGRect(x: startFrame.origin.x - (startFrame.height - startFrame.width)/2, y: startFrame.origin.y, width: startFrame.height, height: startFrame.height)
  
          containerView!.insertSubview(toViewController.view, atIndex: 0)
          containerView!.addSubview(imageViewSnapshot)
  
  
          // UIViewController circle shrink animation
          let bigCirclePath = UIBezierPath(ovalInRect: quadraticStartFrame)
  
          let smallCirclePath = UIBezierPath(ovalInRect: imageViewSnapshot.frame)
          let maskLayer = CAShapeLayer()
          maskLayer.frame = toViewController.view.frame
          maskLayer.path = bigCirclePath.CGPath//maskPath.CGPath
          fromViewController.view.layer.mask = maskLayer
  
          let pathAnimation = CABasicAnimation(keyPath: "path")
          pathAnimation.delegate = self
          pathAnimation.fromValue = bigCirclePath.CGPath
          pathAnimation.toValue = smallCirclePath.CGPath
          pathAnimation.duration = transitionDuration(transitionContext)
          maskLayer.path = smallCirclePath.CGPath
          maskLayer.addAnimation(pathAnimation, forKey: "pathAnimation")
  
          //        pathAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
  
          imageViewSnapshot.frame = quadraticStartFrame
  
          // Make imageView visible with animation
          let showImageViewAnimation =  {
              imageViewSnapshot.alpha = 1.0
          }
          let showImageViewDelay = 0.3
          UIView.animateWithDuration(transitionDuration(transitionContext) - showImageViewDelay , delay: showImageViewDelay, options: UIViewAnimationOptions.CurveLinear, animations: showImageViewAnimation) { (completed) -&gt; Void in
          }
  
          // Shrink the imageView to the original size
          let scaleImageViewAnimation = {
              imageViewSnapshot.frame = imageViewSnapshotOriginalFrame
          }
          UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: scaleImageViewAnimation) { (completed) -&gt; Void in
              // After the complete animations have endet
  
              // Hide ImageView after it is completely resized. Added some animation delay to not abruptly change the contactImage
              if self.hideDelayed {
                  let hideImageViewAnimation =  {
                      imageViewSnapshot.alpha = 0.0
                  }
                  UIView.animateWithDuration(0.2 , delay: 0.2, options: UIViewAnimationOptions.CurveLinear, animations: hideImageViewAnimation) { (completed) -&gt; Void in
                      imageViewSnapshot.removeFromSuperview()
                  }
              }
              else {
                  imageViewSnapshot.removeFromSuperview()
              }
          }
      }
  
      override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
          if let transitionContext = self.transitionContext {
              transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
          }
      }
  
      // MARK: UIViewControllerTransitioningDelegate protocol methods
  
      // return the animataor when presenting a viewcontroller
      func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -&gt; UIViewControllerAnimatedTransitioning? {
          return self
      }
  
      // return the animator used when dismissing from a viewcontroller
      func animationControllerForDismissedController(dismissed: UIViewController) -&gt; UIViewControllerAnimatedTransitioning? {
          return self
      }
  
  }
  </code></pre>