2017-08-15 93 views
1

我遇到了捏缩放问题UIImageView它设置在UIScrollView。图像会根据用户的捏点输入进行缩放,但图像会变大并变大,直到占据整个屏幕,而不是停留在我的UIScrollView的范围内。我看了一堆不同的SO问题,文章和YouTube视频,试图找到问题的根源,但一直未能找到任何东西。Swift - UIImageView的缩放比UIScrollView的大

下SO问题似乎是松散的联系,但我还是不能看着他们之后解决我的问题:

我的故事板中创建了我的UIScrollView,我使用在界面生成器中创建的布局约束将其固定到位。我在viewDidLoad()中将滚动视图的代理设置为self(并且已将UIScrollViewDelegate添加到我的课程顶部)。 UIImageView以编程方式创建。我宣布图像视图在类如下面的顶部:

class VCImageViewer: UIViewController, UIScrollViewDelegate { 
@IBOutlet weak var lblImageTitle: UILabel! 
@IBOutlet weak var btnBack: UIButton! 
@IBOutlet weak var scrollView: UIScrollView! 

var imageView:UIImageView = UIImageView() // <-- Image view 

我然后在viewDidLoad()添加图像视图作为我UIScrollView子视图与代码的后续行,叫:

self.scrollView.addSubview(self.imageView) 

将图像视图添加到滚动视图后,我将图像加载到图像视图中。我从URL中获取图像,并使用以下代码加载它。再次,这在viewDidLoad()中被调用。

self.imageView.image = UIImage(data: data) 
      self.imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: (self.imageView.image?.size)!) 
      if self.imageView.image != nil { 
       self.lblError.isHidden = true 
       self.FormatImageViewerWithImage() 
      } 

这确认图像已正确加载,隐藏着一个警告标签,如果它没有我将显示,并调用self.FormatImageViewerWithImage(),低于:

func FormatImageViewerWithImage() { 
    // Constraints 
    let constraintImageViewTop:NSLayoutConstraint = NSLayoutConstraint(item: self.imageView, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: self.scrollView, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0) 
    let constraintImageViewBottom:NSLayoutConstraint = NSLayoutConstraint(item: self.imageView, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: self.scrollView, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0) 
    let constraintImageViewLeft:NSLayoutConstraint = NSLayoutConstraint(item: self.imageView, attribute: NSLayoutAttribute.left, relatedBy: NSLayoutRelation.equal, toItem: self.scrollView, attribute: NSLayoutAttribute.left, multiplier: 1, constant: 0) 
    let constraintImageViewRight:NSLayoutConstraint = NSLayoutConstraint(item: self.imageView, attribute: NSLayoutAttribute.right, relatedBy: NSLayoutRelation.equal, toItem: self.scrollView, attribute: NSLayoutAttribute.right, multiplier: 1, constant: 0) 
    self.view.addConstraints([constraintImageViewTop, constraintImageViewBottom, constraintImageViewLeft, constraintImageViewRight]) 

    self.scrollView.contentSize = self.imageView.image!.size 
    self.scrollView.clipsToBounds = false 
    let scrollViewFrame = scrollView.frame 
    let scaleWidth = scrollViewFrame.size.width/self.scrollView.contentSize.width 
    let scaleHeight = scrollViewFrame.size.height/self.scrollView.contentSize.height 
    let minScale = min(scaleWidth, scaleHeight) 
    self.scrollView.minimumZoomScale = minScale 

    self.scrollView.maximumZoomScale = 1.0 
    self.scrollView.zoomScale = minScale 
} 

我也与实施scrollViewDidZoom

func scrollViewDidZoom(_ scrollView: UIScrollView) { 
    self.CentreScrollViewContents() 
} 
func CentreScrollViewContents() { 
    let boundsSize = self.scrollView.bounds.size 
    var contentsFrame = self.imageView.frame 
    if contentsFrame.size.width < boundsSize.width { 
     contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width)/2 
    } else { 
     contentsFrame.origin.x = 0 
    } 
    if contentsFrame.size.height < boundsSize.height { 
     contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height)/2 
    } else { 
     contentsFrame.origin.y = 0 
    } 
    self.imageView.frame = contentsFrame 
} 

viewForZooming用:

func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
    return self.imageView 
} 

我已经看过以前的问题(包括上面列出的一些问题),建议将代码添加到viewWillLayoutSubviews(),但是我还没有取得任何成功,所以我的viewWillLayoutSubviews()是空的。

任何人都可以看到我做错了什么吗?

+1

更改this:self.scrollView.clipsToBounds = false此self.scrollView.clipsToBounds = true –

+0

@MohammadBashirSidani Legend!非常感谢你,我正在为此而撕心裂肺。如果您想将其添加为答案,我会为您接受。 –

+0

非常高兴它的工作!我将添加它作为答案,谢谢! –

回答

1

请改变这一行:

self.scrollView.clipsToBounds = false 

这一行:

self.scrollView.clipsToBounds = true 

希望这有助于!

相关问题