无法缩放 UIImageView
Cannot Zoom UIImageView
我是 swift 的新手。
我正在做一本应用程序开发书籍中的练习。我正在尝试创建一个 UIImageView
并将图像放入其中,但我无法放大图像。我的代码有问题,但我不知道发生了什么。
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var image: UIImageView!
@IBOutlet weak var scroll: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scroll.delegate = ViewController()
updateZoomFor(size:view.bounds.size)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func viewForZooming(in scrollView: UIScrollView) -> UIImageView{
return image
}
func updateZoomFor(size:CGSize){
let widthScale = size.width / image.bounds.width
let heightScale = size.height / image.bounds.height
let scale = min(widthScale, heightScale)
scroll.minimumZoomScale = scale
}
}
首先,按照3stud1ant3的建议设置scroll.delegate = self
。
其次,需要匹配UIScrollViewDelegate
方法的定义:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return image
}
确保在 updateZoomFor
中也设置了缩放比例:scroll.zoomScale = scale
。
你还需要实现这个:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
updateZoomFor(size: view.bounds.size)
}
func scrollViewDidZoom(_ scrollView: UIScrollView) {
updateConstraintsForSize(view.bounds.size)
}
fileprivate func updateConstraintsForSize(_ size: CGSize) {
let yOffset = max(0, (size.height - imageView.frame.height) / 2)
imageViewTopConstraint.constant = yOffset
imageViewBottomConstraint.constant = yOffset
let xOffset = max(0, (size.width - imageView.frame.width) / 2)
imageViewLeadingConstraint.constant = xOffset
imageViewTrailingConstraint.constant = xOffset
view.layoutIfNeeded()
}
我是 swift 的新手。
我正在做一本应用程序开发书籍中的练习。我正在尝试创建一个 UIImageView
并将图像放入其中,但我无法放大图像。我的代码有问题,但我不知道发生了什么。
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var image: UIImageView!
@IBOutlet weak var scroll: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scroll.delegate = ViewController()
updateZoomFor(size:view.bounds.size)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func viewForZooming(in scrollView: UIScrollView) -> UIImageView{
return image
}
func updateZoomFor(size:CGSize){
let widthScale = size.width / image.bounds.width
let heightScale = size.height / image.bounds.height
let scale = min(widthScale, heightScale)
scroll.minimumZoomScale = scale
}
}
首先,按照3stud1ant3的建议设置scroll.delegate = self
。
其次,需要匹配UIScrollViewDelegate
方法的定义:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return image
}
确保在 updateZoomFor
中也设置了缩放比例:scroll.zoomScale = scale
。
你还需要实现这个:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
updateZoomFor(size: view.bounds.size)
}
func scrollViewDidZoom(_ scrollView: UIScrollView) {
updateConstraintsForSize(view.bounds.size)
}
fileprivate func updateConstraintsForSize(_ size: CGSize) {
let yOffset = max(0, (size.height - imageView.frame.height) / 2)
imageViewTopConstraint.constant = yOffset
imageViewBottomConstraint.constant = yOffset
let xOffset = max(0, (size.width - imageView.frame.width) / 2)
imageViewLeadingConstraint.constant = xOffset
imageViewTrailingConstraint.constant = xOffset
view.layoutIfNeeded()
}