gpt4 book ai didi

swift - UIScrollView 中的 UIImageView 中的 UIImage 自动放大 - 如何最初查看整个 UIImage?

转载 作者:行者123 更新时间:2023-11-30 10:27:56 24 4
gpt4 key购买 nike

我有一个带有 UIScrollView 的 UIViewController。在后一个 View 中有一个 UIImageView。我已经实现了 UIImageView 以便用户可以放大/缩小。然而,一开始我希望用户在决定放大/缩小之前看到整个 UIImage。目前 UIImage 只是自动放大。 stackOverflow 上的很多答案建议将 UIImageView.contentMode 设置为 scaleAspectFit - 我已经这样做了,但没有成功。

class ViewImageViewController: UIViewController, UIScrollViewDelegate {

var imageToPresent: UIImage!
let scrollView: UIScrollView = {
let view = UIScrollView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()

let imageView: UIImageView = {
let imgView = UIImageView()
imgView.backgroundColor = UIColor.black
imgView.contentMode = .scaleAspectFit
imgView.isUserInteractionEnabled = true
imgView.translatesAutoresizingMaskIntoConstraints = false
return imgView
}()


override func viewDidLoad() {
super.viewDidLoad()
print("ViewImageViewController.viewDidLoad")

view.backgroundColor = UIColor.appGrayForLabels
setupViews()
scrollView.delegate = self
}


private func setupViews(){
view.addSubview(scrollView)
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 4.0
scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
scrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true


guard let img = imageToPresent else{return}
imageView.image = img
scrollView.addSubview(imageView)
imageView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
scrollView.isScrollEnabled = true
return imageView
}

最佳答案

您想要将 .minimumZoomScale 设置为图像大小与 ScrollView 大小之间的比率,然后将 .zoomScale 设置为该值以开始。

这是您的代码,进行了一些修改:

class ViewImageViewController: UIViewController, UIScrollViewDelegate {

var imageToPresent: UIImage!

let scrollView: UIScrollView = {
let view = UIScrollView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()

let imageView: UIImageView = {
let imgView = UIImageView()
imgView.backgroundColor = UIColor.black
imgView.contentMode = .scaleAspectFit
imgView.isUserInteractionEnabled = true
imgView.translatesAutoresizingMaskIntoConstraints = false
return imgView
}()

override func viewDidLoad() {
super.viewDidLoad()
print("ViewImageViewController.viewDidLoad")

if let img = UIImage(named: "background") {
imageToPresent = img
}

view.backgroundColor = .gray // UIColor.appGrayForLabels
setupViews()
scrollView.delegate = self

}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / imageToPresent.size.width
let scaleHeight = scrollViewFrame.size.height / imageToPresent.size.height

let minScale = min(scaleWidth, scaleHeight)

scrollView.minimumZoomScale = minScale
scrollView.maximumZoomScale = 4.0

scrollView.zoomScale = minScale
}

private func setupViews(){

scrollView.isScrollEnabled = true

view.addSubview(scrollView)

scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
scrollView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true


guard let img = imageToPresent else{return}
imageView.image = img
scrollView.addSubview(imageView)

let g = scrollView.contentLayoutGuide

imageView.topAnchor.constraint(equalTo: g.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: g.bottomAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: g.leadingAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: g.trailingAnchor).isActive = true

imageView.widthAnchor.constraint(equalToConstant: imageToPresent.size.width).isActive = true
imageView.heightAnchor.constraint(equalToConstant: imageToPresent.size.height).isActive = true

}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}

}

关于swift - UIScrollView 中的 UIImageView 中的 UIImage 自动放大 - 如何最初查看整个 UIImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com