我第一次从相机胶卷中选取图像时,以下代码将按预期运行。图像会适当缩小以适合scrollView。但是,当我再次运行它以重新选择图像并再次选择同一图像时,它将放大到1.0比例。无法弄清楚我需要重新设置以使其每次都能正常工作。有任何想法吗?

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {

    scrollView.contentSize = CGSize(width: 0, height: 0)
    picView.image = nil
    picView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    picView.removeFromSuperview()
    self.dismissViewControllerAnimated(true, completion: nil)
    scrollView.addSubview(picView)

    scrollView.contentSize = image.size

    let scaleWidth = scrollView.frame.size.width / scrollView.contentSize.width //image.size.width
    let scaleHeight = scrollView.frame.size.height / scrollView.contentSize.height //image.size.height
    let minScale = min(scaleWidth, scaleHeight)
    scrollView.minimumZoomScale = minScale
    scrollView.maximumZoomScale = 1.0
    scrollView.zoomScale = minScale
}

最佳答案

我认为您已经解决了这个问题,但是我只填写可能缺少的难题。缩放实际上如何工作?正如我说的in my book:

滚动视图通过将缩放变换应用于可缩放视图来进行缩放。此外,滚动视图还涉及使滚动继续正确地工作。 ...因此,滚动视图会自动缩放其自己的contentSize以匹配当前的zoomScale。

因此,在开始播放内容大小之前,需要删除该转换。因此,在换出图像视图之前,将zoomScale预先重置为1可能就足够了。

更好的是,为什么不将图像视图留在那里?您似乎在日常工作中做了很多不必要的工作;为什么不将其视为具有图像视图内容视图的滚动视图,其中仅交换了图像?

最后,为什么不使用自动布局?这样,图像的大小自动变为图像视图的大小,并且图像视图的大小自动变为滚动视图的内容大小。

09-03 17:57