使用滚动视图放大图像 Swift
Using a scroll view to zoom in an image with Swift
我正在向 Apple "App Development in Swift" 学习 Swift。
我在约束方面遇到了问题,尤其是在第 593 页的 "I Spy" 实验室中。它主要是希望您创建一个滚动视图,其中包含一个图像视图,这样您就可以放大图像并滚动它,就像打开照片时在“照片”应用中一样。
书上说要使滚动视图和图像视图都与屏幕一样大并带有约束,所以我将顶部、底部、前导和尾部约束添加为 0,并且效果很好。
当我添加图像视图时,我开始遇到问题。如果我设置与滚动视图相同的约束,它会说它缺少 X 和 Y 位置的约束,并且它不起作用。
如果我确实添加了这些约束,所以我让它水平和垂直对齐,图像只会拉伸到屏幕上,但我仍然无法缩放或滚动。
视图控制器的代码是:
class ViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = ViewController()
updateZoomFor(size: view.bounds.size)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
func updateZoomFor(size: CGSize){
let widthScale = size.width / imageView.bounds.width
let heightScale = size.height / imageView.bounds.height
let scale = min(widthScale,heightScale)
scrollView.minimumZoomScale = scale
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我试着在互联网上四处寻找,但没有找到任何东西。我希望这不是一个愚蠢的问题,但我试了一天才弄明白。
让我们从约束开始,您的滚动视图已正确添加,
现在对于你的 imageView,将它拖放到你的滚动视图中,按照你想要的方式指定左右上下约束,并将你的 imageView 垂直和水平居中,就像下面的屏幕截图一样
让我们继续imageView。
Select 在你的故事板和助理编辑器中将内容模式更改为纵横比适合,如下所示:
现在让我们转到代码,
通过键入 scrollView.delegate = ViewController() 您正在创建一个类型为 ViewController 的新实例并且您没有使用现有实例,这就是为什么您应该替换此行与 :
scrollView.delegate = self
这样你将引用你现有的视图控制器的超类
并考虑也添加此内容:
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 5.0
scrollView.contentSize = .init(width: 2000, height: 2000)
最好的,
马克
我正在向 Apple "App Development in Swift" 学习 Swift。
我在约束方面遇到了问题,尤其是在第 593 页的 "I Spy" 实验室中。它主要是希望您创建一个滚动视图,其中包含一个图像视图,这样您就可以放大图像并滚动它,就像打开照片时在“照片”应用中一样。
书上说要使滚动视图和图像视图都与屏幕一样大并带有约束,所以我将顶部、底部、前导和尾部约束添加为 0,并且效果很好。
当我添加图像视图时,我开始遇到问题。如果我设置与滚动视图相同的约束,它会说它缺少 X 和 Y 位置的约束,并且它不起作用。 如果我确实添加了这些约束,所以我让它水平和垂直对齐,图像只会拉伸到屏幕上,但我仍然无法缩放或滚动。
视图控制器的代码是:
class ViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = ViewController()
updateZoomFor(size: view.bounds.size)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
func updateZoomFor(size: CGSize){
let widthScale = size.width / imageView.bounds.width
let heightScale = size.height / imageView.bounds.height
let scale = min(widthScale,heightScale)
scrollView.minimumZoomScale = scale
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我试着在互联网上四处寻找,但没有找到任何东西。我希望这不是一个愚蠢的问题,但我试了一天才弄明白。
让我们从约束开始,您的滚动视图已正确添加, 现在对于你的 imageView,将它拖放到你的滚动视图中,按照你想要的方式指定左右上下约束,并将你的 imageView 垂直和水平居中,就像下面的屏幕截图一样
让我们继续imageView。
Select 在你的故事板和助理编辑器中将内容模式更改为纵横比适合,如下所示:
现在让我们转到代码,
通过键入 scrollView.delegate = ViewController() 您正在创建一个类型为 ViewController 的新实例并且您没有使用现有实例,这就是为什么您应该替换此行与 :
scrollView.delegate = self
这样你将引用你现有的视图控制器的超类
并考虑也添加此内容:
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 5.0
scrollView.contentSize = .init(width: 2000, height: 2000)
最好的, 马克