下面的代码在我第一次从相机胶卷中选择图像时按预期运行。图像缩小了适合滚动视图。但是当我再次运行它来重新渲染图像并再次选择相同的图像时,它会缩放到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
}
答案 0 :(得分:3)
我认为你已经想到了这个,但我只是填写可能是这个谜题的遗失部分。缩放实际上如何工作?正如我所说in my book:
通过将缩放变换应用于可缩放视图来缩放滚动视图...此外,滚动视图用于使滚动继续正常工作; ...因此,滚动视图会自动缩放其自己的contentSize以匹配当前的zoomScale。
因此,在开始播放内容大小之前,您需要删除该转换。因此,在您交换图像视图之前,将zoomScale
重置为1可能就足够了。
更好的是,为什么不将图像视图保留在那里?你似乎在日常工作中做了很多不必要的工作;为什么不将其视为带有图像视图内容视图的滚动视图,哪些被换出的只是图像?
最后,为什么不使用自动布局?这样,图像的大小自动成为图像视图的大小,图像视图的大小自动成为滚动视图的内容大小。