From 6c562f93b51af2368a14f8e905cc7925effd7834 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Wed, 16 Oct 2019 19:32:33 -0500 Subject: [PATCH] Add a masking subview so that the image appears to slide under the nav and toolbars --- iOS/Article/ArticleViewController.swift | 1 + iOS/Article/ImageTransition.swift | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index ae623cefb..352dd422d 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -441,6 +441,7 @@ private extension ArticleViewController { if let imageData = Data(base64Encoded: base64Image), let image = UIImage(data: imageData) { let rect = CGRect(x: CGFloat(clickMessage.x), y: CGFloat(clickMessage.y), width: CGFloat(clickMessage.width), height: CGFloat(clickMessage.height)) transition.originFrame = webView.convert(rect, to: nil) + transition.maskFrame = webView.convert(webView.frame, to: nil) transition.originImage = image let imageVC = UIStoryboard.main.instantiateController(ofType: ImageViewController.self) diff --git a/iOS/Article/ImageTransition.swift b/iOS/Article/ImageTransition.swift index e3268c184..17a14c926 100644 --- a/iOS/Article/ImageTransition.swift +++ b/iOS/Article/ImageTransition.swift @@ -14,6 +14,7 @@ class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning { private let duration = 0.4 var presenting = true var originFrame: CGRect! + var maskFrame: CGRect! var originImage: UIImage! init(controller: ArticleViewController) { @@ -67,11 +68,22 @@ class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning { imageView.frame = imageController.zoomedFrame let fromView = transitionContext.view(forKey: .from)! + let windowFrame = fromView.window!.frame fromView.removeFromSuperview() let toView = transitionContext.view(forKey: .to)! transitionContext.containerView.addSubview(toView) - transitionContext.containerView.addSubview(imageView) + + let maskingView = UIView() + + let fullMaskFrame = CGRect(x: windowFrame.minX, y: maskFrame.minY, width: windowFrame.width, height: maskFrame.height) + let path = UIBezierPath(rect: fullMaskFrame) + let maskLayer = CAShapeLayer() + maskLayer.path = path.cgPath + maskingView.layer.mask = maskLayer + + maskingView.addSubview(imageView) + transitionContext.containerView.addSubview(maskingView) UIView.animate( withDuration: duration,