//Cell的点击事件
let rect = targetCell.convert(targetCell.chatImageView.frame, to: self.listTableView)
let rect2 = self.listTableView.convert(rect, to: self.view)
//获取状态栏的rect
let statusRect = UIApplication.shared.statusBarFrame
//获取导航栏的rect
let navRect = self.navigationController?.navigationBar.frame
let navBarHeight = statusRect.height + (navRect?.height)!
let tapFrame = CGRect.init(x: rect2.origin.x, y: rect2.origin.y + navBarHeight, width: rect2.width, height: rect2.height)
let image = targetCell.chatImageView.image
showZoomImageView(image, tapFrame:tapFrame)
//图片缩放动画
func showZoomImageView(image:UIImage, tapFrame:CGRect) {
let bgView = UIScrollView.init(frame: UIScreen.main.bounds)
bgView.backgroundColor = UIColor.clear
let tapBg = UITapGestureRecognizer.init(target: self, action: #selector(tapBgView(tapBgRecognizer:)))
bgView.addGestureRecognizer(tapBg)
let tmpImageView = UIImageView.init()
tmpImageView.setImage(image, "default_image")
tmpImageView.frame = bgView.frame
tmpImageView.contentMode = .scaleAspectFit
bgView.addSubview(tmpImageView)
UIApplication.shared.keyWindow?.addSubview(bgView)
self.lastImageView = tmpImageView
self.originalFrame = tapFrame
self.scrollView = bgView
self.scrollView?.maximumZoomScale = 3.0
self.scrollView?.minimumZoomScale = 1.0
self.scrollView?.delegate = self
self.lastImageView?.frame = self.originalFrame
UIView.animate(
withDuration: 0.5,
delay: 0.0,
options: UIViewAnimationOptions.beginFromCurrentState,
animations: {
self.lastImageView?.frame = (self.scrollView?.bounds)!
self.scrollView?.backgroundColor = UIColor.black
self.scrollView?.zoomScale = 1.0
}, completion: nil
)
}
@objc func tapBgView(tapBgRecognizer:UITapGestureRecognizer){
self.scrollView?.contentOffset = CGPoint.zero
UIView.animate(withDuration: 0.3, animations: {
self.lastImageView?.frame = self.originalFrame
tapBgRecognizer.view?.backgroundColor = UIColor.clear
}) { (finished:Bool) in
tapBgRecognizer.view?.removeFromSuperview()
self.scrollView = nil
self.lastImageView = nil
}
}
//可缩放的view
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return self.lastImageView
}
//缩放响应,设置imageView的中心位置
func scrollViewDidZoom(_ scrollView: UIScrollView) {
var centerX = scrollView.center.x
var centerY = scrollView.center.y
centerX = scrollView.contentSize.width > scrollView.frame.size.width ?
scrollView.contentSize.width/2:centerX
centerY = scrollView.contentSize.height > scrollView.frame.size.height ?
scrollView.contentSize.height/2:centerY
self.lastImageView?.center = CGPoint(x: centerX, y: centerY)
}