无法在 UIScrollView 中缩放图像
Posted
技术标签:
【中文标题】无法在 UIScrollView 中缩放图像【英文标题】:Can't zoom an image in UIScrollView 【发布时间】:2017-08-14 11:51:52 【问题描述】:我已经坚持了好几个小时了。我想要的只是 ScrollView 中的 ImageView。我希望将 contentMode 设置为方面填充,以便图像每次都填充 ImageView。我还希望用户能够缩放和平移图像。这是我的代码:
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate
var scrollView: UIScrollView!
var imageView: UIImageView!
override func viewDidLoad()
super.viewDidLoad()
let image = UIImage(named: "fish")!
imageView = UIImageView(image: image)
imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
imageView.contentMode = .scaleAspectFill
scrollView = UIScrollView(frame: view.bounds)
scrollView.backgroundColor = UIColor.black
scrollView.contentSize = imageView.bounds.size
scrollView.delegate = self
scrollView.minimumZoomScale = 0.1
scrollView.maximumZoomScale = 4.0
scrollView.zoomScale = 1.0
scrollView.addSubview(imageView)
view.addSubview(scrollView)
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
return imageView
首先我无法放大或缩小,不明白为什么。我设置了 delegate,实施了 viewForZoomingInScrollView 并设置了 maximumZoomScale 从我读到的缩放工作所需的内容。
其次,图像不适合屏幕。内容模式设置似乎没有任何影响,因为当我将其设置为 .scaleToFill 时,图像不会被挤压到屏幕中,我可以平移它。
图片小于屏幕: http://i.imgur.com/eEuy0En.png
原文: http://i.imgur.com/GtkKWKu.jpg
图片大于屏幕: http://i.imgur.com/1cH4rrk.png
原文: http://i.imgur.com/ThNhapb.jpg
较小的图像应该在屏幕上填满,但它不会,并且缩放在这两种情况下都不起作用。我只能平移较大的图像。
【问题讨论】:
请查看我的回答 【参考方案1】:您的问题是 UIScrollViewDelegate
方法中的拼写错误
应该是
func viewForZooming(in scrollView: UIScrollView) -> UIView?
希望对你有帮助
【讨论】:
谢谢,这解决了缩放问题。 AspectFill 仍然不起作用:/ 我认为你应该使用imageView.contentMode = .scaleAspectFit
而不是imageView.contentMode = .scaleAspectFill
【参考方案2】:
请试试这个:
func viewForZooming(in scrollView: UIScrollView) -> UIView?
return imageView!
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat)
self.scrollView.flashScrollIndicators()
【讨论】:
【参考方案3】:创建两个出口:---
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imgPhoto: UIImageView!
override func viewDidLoad()
super.viewDidLoad()
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 6.0
func viewForZooming(in scrollView: UIScrollView) -> UIView?
return imgPhoto
其他代码
let image = UIImage(named: "fish")!
imageView = UIImageView(image: image)
imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
// imageView.contentMode = .scaleAspectFill
//
scrollView = UIScrollView(frame: view.bounds)
// scrollView.backgroundColor = UIColor.black
// scrollView.contentSize = imageView.bounds.size
scrollView.delegate = self
scrollView.minimumZoomScale = 0.1
scrollView.maximumZoomScale = 4.0
//scrollView.zoomScale = 1.0
scrollView.addSubview(imageView)
view.addSubview(scrollView)
【讨论】:
以上是关于无法在 UIScrollView 中缩放图像的主要内容,如果未能解决你的问题,请参考以下文章