UIImageView放大和捏在UIScrollView

我已经尝试了许多不同的方式来实现扩大形象和捏缩放。 我find了关于如何在保存在我的项目中的图像的教程,但是我正在从Firebase中检索我的图像。 我想要一个图像占据大约一半的ProfileViewController屏幕和其他图片可以扩展整个页面,也有能力放大。 我的代码,我现在这样做,但是这种缩放和位置不干净或易于使用。

var newImageView: UIImageView! @IBAction func imageTapped(_ sender: UITapGestureRecognizer) { let imageView = sender.view as! UIImageView let scrollView = UIScrollView(frame: self.view.frame) newImageView = UIImageView(image: imageView.image) newImageView.frame = self.view.frame newImageView.backgroundColor = .black newImageView.contentMode = .top newImageView.isUserInteractionEnabled = true let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage)) scrollView.addGestureRecognizer(tap) scrollView.delegate = self scrollView.minimumZoomScale = 1.0 scrollView.maximumZoomScale = 3.0 scrollView.addSubview(newImageView) self.view.addSubview(scrollView) } func viewForZooming(in scrollView: UIScrollView) -> UIView? { return newImageView; } func dismissFullscreenImage(_ sender: UITapGestureRecognizer) { sender.view?.removeFromSuperview() } 

profilePageView

在这里输入图像说明

这里是我创buildscrollview和imageview编程方式,这里img是一个PHAsset ,我从图库中select图像。

在这里,我在做什么,select一个图像,并移动到其他视图控制器,我根据我的imageview调整图像所以图像缩放后不是模糊的。

最小缩放是imageview绑定和最大缩放是4.0。

 func singleVC1() { let v = UIView(frame: CGRect(x: 40, y: 50, width: self.view.frame.size.width - 80, height: view.frame.size.height - 200)) let view1 = UIView(frame: CGRect(x: 0, y: 0, width: v.frame.size.width, height: v.frame.size.height/2 - 1)) let scroll1 = UIScrollView.init(frame: view1.bounds) let imgview = UIImageView.init(frame: (CGRect)(origin: CGPoint.zero, size: self.returnAspectSize(targetWidth: view.frame.size.width, img: img))) self.setZoomScale(scrollview: scroll1, imageview: imgview) imgview.image = self.getUIImage(asset: img) scroll1.maximumZoomScale = 4.0; scroll1.delegate = self; scroll1.bounces = false scroll1.contentSize = imgview.frame.size scroll1.addSubview(imgview) view1.layer.borderColor = UIColor.red.cgColor view1.layer.borderWidth = 5.0 view1.addSubview(scroll1) v.addSubview(view1) let view2 = UIView(frame: CGRect(x: 0, y: v.frame.size.height/2+1, width: v.frame.size.width, height: v.frame.size.height/2 - 1)) let scroll2 = UIScrollView.init(frame: view2.bounds) let imgview1 = UIImageView.init(frame: (CGRect)(origin: CGPoint.zero, size: self.returnAspectSize(targetWidth: view.frame.size.width, img: img))) imgview1.image = self.getUIImage(asset: img) self.setZoomScale(scrollview: scroll2, imageview: imgview1) scroll2.bounces = false scroll2.maximumZoomScale = 4.0; scroll2.delegate = self; view2.layer.borderColor = UIColor.red.cgColor view2.layer.borderWidth = 5.0 scroll2.contentSize = imgview1.frame.size scroll2.addSubview(imgview1) view2.addSubview(scroll2) v.addSubview(view2) self.view.addSubview(v) } func setZoomScale(scrollview : UIScrollView, imageview : UIImageView) { var minZoom = min(self.view.bounds.size.width / imageview.bounds.size.width, self.view.bounds.size.height / imageview.bounds.size.height); if (minZoom > 1.0) { minZoom = 1.0; } scrollview.minimumZoomScale = minZoom; scrollview.zoomScale = minZoom; } func returnAspectSize(targetWidth : CGFloat, img : PHAsset) -> CGSize { let img1 = self.getUIImage(asset: self.img) let targetwidth = targetWidth let scalefactor = (CGFloat)(targetwidth) / (CGFloat)((img1?.size.width)!) let targetheight = (img1?.size.height)! * scalefactor let targesize = CGSize(width: (CGFloat)(targetwidth), height: targetheight) return targesize } 

尝试这个。 我相信这会帮助你。