【问题标题】:How to properly zoom into a picture using scroll view without image flying to a random side如何使用滚动视图正确放大图片而不使图像飞到随机一侧
【发布时间】:2019-09-02 23:34:20
【问题描述】:
我设法在UIScrollView 中将UIImageView 缩放到UIImageView,但图像离开到侧面或底部,因此我无法在放大模式下滚动整个图像。
尝试使用constraints,似乎没有效果。
import Foundation
import UIKit
class PhotoZoomController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var scroller: UIScrollView!
@IBOutlet weak var back: UIButton!
weak var image: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
assert(imageView != nil)
if let iv = imageView {
iv.image = image
}
scroller.delegate = self
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
@IBAction func exit(_ sender: Any) {
dismiss(animated: true)
}
}
【问题讨论】:
标签:
ios
swift
xcode
uiscrollview
uiimageview
【解决方案1】:
我想通了,首先将storyboard中的imageview以0间距绑定到scrollview的4个边缘,然后为水平/垂直中间定位添加约束。
之后包括:
self.imageView?.clipsToBounds = true
scroller.contentSize = imageView?.image?.size ?? scroller.contentSize
这是整个文件:
//
// PhotoZoomController.swift
//
//
// Created by John Karasev on 4/04/19.
// Copyright © 2019 John Karasev. All rights reserved.
//
import Foundation
import UIKit
class PhotoZoomController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scroller: UIScrollView!
@IBOutlet weak var back: UIButton!
@IBOutlet weak var imageView: UIImageView!
weak var image: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
assert(imageView != nil)
if let iv = imageView {
iv.image = image
}
scroller.delegate = self
scroller.zoomScale = 1.0
scroller.addSubview(imageView!)
self.imageView?.clipsToBounds = true
scroller.contentSize = imageView?.image?.size ?? scroller.contentSize
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
@IBAction func exit(_ sender: Any) {
dismiss(animated: true)
}
}
【解决方案2】:
请尝试添加ZoomScale。
scrollView.minimumZoomScale = 1.0 // Minimum zoom scale
scrollView.maximumZoomScale = 10.0 // Maximum zoom scale
scrollView.zoomScale = 1.0 //Default zoom scale
希望此代码对您有用。