我第一次从相机胶卷中选取图像时,以下代码将按预期运行。图像会适当缩小以适合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可能就足够了。
更好的是,为什么不将图像视图留在那里?您似乎在日常工作中做了很多不必要的工作;为什么不将其视为具有图像视图内容视图的滚动视图,其中仅交换了图像?
最后,为什么不使用自动布局?这样,图像的大小自动变为图像视图的大小,并且图像视图的大小自动变为滚动视图的内容大小。