Add mask back in so that the zoom image doesn't overlay the bars when zooming back.

This commit is contained in:
Maurice Parker 2019-12-10 17:54:14 -07:00
parent ffa3c9fd67
commit 6f2e6a7d9a
2 changed files with 21 additions and 1 deletions

View File

@ -520,9 +520,17 @@ private extension ArticleViewController {
let base64Image = String(clickMessage.imageURL.suffix(from: range.upperBound)) let base64Image = String(clickMessage.imageURL.suffix(from: range.upperBound))
if let imageData = Data(base64Encoded: base64Image), let image = UIImage(data: imageData) { if let imageData = Data(base64Encoded: base64Image), let image = UIImage(data: imageData) {
let y = CGFloat(clickMessage.y) + webView.safeAreaInsets.top let y = CGFloat(clickMessage.y) + webView.safeAreaInsets.top
let rect = CGRect(x: CGFloat(clickMessage.x), y: y, width: CGFloat(clickMessage.width), height: CGFloat(clickMessage.height)) let rect = CGRect(x: CGFloat(clickMessage.x), y: y, width: CGFloat(clickMessage.width), height: CGFloat(clickMessage.height))
transition.originFrame = webView.convert(rect, to: nil) transition.originFrame = webView.convert(rect, to: nil)
if navigationController?.navigationBar.isHidden ?? false {
transition.maskFrame = webView.convert(webView.frame, to: nil)
} else {
transition.maskFrame = webView.convert(webView.safeAreaLayoutGuide.layoutFrame, to: nil)
}
transition.originImage = image transition.originImage = image
coordinator.showFullScreenImage(image: image, transitioningDelegate: self) coordinator.showFullScreenImage(image: image, transitioningDelegate: self)

View File

@ -14,6 +14,7 @@ class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning {
private let duration = 0.4 private let duration = 0.4
var presenting = true var presenting = true
var originFrame: CGRect! var originFrame: CGRect!
var maskFrame: CGRect!
var originImage: UIImage! var originImage: UIImage!
init(controller: ArticleViewController) { init(controller: ArticleViewController) {
@ -67,11 +68,22 @@ class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning {
imageView.frame = imageController.zoomedFrame imageView.frame = imageController.zoomedFrame
let fromView = transitionContext.view(forKey: .from)! let fromView = transitionContext.view(forKey: .from)!
let windowFrame = fromView.window!.frame
fromView.removeFromSuperview() fromView.removeFromSuperview()
let toView = transitionContext.view(forKey: .to)! let toView = transitionContext.view(forKey: .to)!
transitionContext.containerView.addSubview(toView) 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( UIView.animate(
withDuration: duration, withDuration: duration,