无法在 UIScrollView 中缩放 UIImageView
Unable to zoom UIImageView in UIScrollView
我想在 ScrollView
中放大 UIImageView
,但我不知道该怎么做。
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
var scrollView: UIScrollView = UIScrollView()
var viewInScrollView: UIView = UIView()
var selectedImageView: UIImageView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
view.addSubview(scrollView)
scrollView.addSubview(viewInScrollView)
viewInScrollView.addSubview(selectedImageView)
selectedImageView.image = UIImage(named: "michael")
scrollView.translatesAutoresizingMaskIntoConstraints = false
viewInScrollView.translatesAutoresizingMaskIntoConstraints = false
selectedImageView.translatesAutoresizingMaskIntoConstraints = false
scrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
viewInScrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
viewInScrollView.widthAnchor.constraint(equalToConstant: view.frame.width).isActive = true
viewInScrollView.heightAnchor.constraint(equalToConstant: view.frame.height).isActive = true
selectedImageView.anchor(top: viewInScrollView.topAnchor, leading: viewInScrollView.leadingAnchor, bottom: viewInScrollView.bottomAnchor, trailing: viewInScrollView.trailingAnchor)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return selectedImageView
}
}
我建议从 a tutorial example 开始 UIScrollView
缩放。先一步步来。
还有....
乍一看,您对 viewInScrollView
的限制并不准确。您项目中的视图层次结构是
view -> scrollView -> viewInScrollView -> selectedImageView
viewInScrollView
的约束将决定 UIScrollView
的 contentSize
。当缩小 in/zooming 时,contentSize
会发生变化。因此,它的(顶部、底部、左侧、右侧)锚点应与 UIScrollView
对齐,而不是 view
。所以我认为下面的约束是错误的。
// Not right
viewInScrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
// It should aligned to `UIScrollView`'s top, bottom, left and right anchors.
您必须将 maximumZoomScale
、minimumZoomScale
添加到您的 scrollView
中,如下所示。
scrollView.minimumZoomScale = 0.25
scrollView.maximumZoomScale = 5.0
希望对您有所帮助!
我想在 ScrollView
中放大 UIImageView
,但我不知道该怎么做。
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
var scrollView: UIScrollView = UIScrollView()
var viewInScrollView: UIView = UIView()
var selectedImageView: UIImageView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
view.addSubview(scrollView)
scrollView.addSubview(viewInScrollView)
viewInScrollView.addSubview(selectedImageView)
selectedImageView.image = UIImage(named: "michael")
scrollView.translatesAutoresizingMaskIntoConstraints = false
viewInScrollView.translatesAutoresizingMaskIntoConstraints = false
selectedImageView.translatesAutoresizingMaskIntoConstraints = false
scrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
viewInScrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
viewInScrollView.widthAnchor.constraint(equalToConstant: view.frame.width).isActive = true
viewInScrollView.heightAnchor.constraint(equalToConstant: view.frame.height).isActive = true
selectedImageView.anchor(top: viewInScrollView.topAnchor, leading: viewInScrollView.leadingAnchor, bottom: viewInScrollView.bottomAnchor, trailing: viewInScrollView.trailingAnchor)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return selectedImageView
}
}
我建议从 a tutorial example 开始 UIScrollView
缩放。先一步步来。
还有....
乍一看,您对 viewInScrollView
的限制并不准确。您项目中的视图层次结构是
view -> scrollView -> viewInScrollView -> selectedImageView
viewInScrollView
的约束将决定 UIScrollView
的 contentSize
。当缩小 in/zooming 时,contentSize
会发生变化。因此,它的(顶部、底部、左侧、右侧)锚点应与 UIScrollView
对齐,而不是 view
。所以我认为下面的约束是错误的。
// Not right
viewInScrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
// It should aligned to `UIScrollView`'s top, bottom, left and right anchors.
您必须将 maximumZoomScale
、minimumZoomScale
添加到您的 scrollView
中,如下所示。
scrollView.minimumZoomScale = 0.25
scrollView.maximumZoomScale = 5.0
希望对您有所帮助!