在 ScrollView 中,选择随机排列几个按钮,
使用者缩放与移动 Offset 后,点选两个按钮
请问如何让 ScrollView 自动缩放与改变 Offset,使屏幕画面包含btn1
与btn2
?
以下是简易代码,以免我的语意不清func setZoomScaleAndOffset()
的部分求个思路,谢谢
import UIKit
class ViewController: UIViewController {
var contentView: UIView!
var scrollView: UIScrollView!
var btn1: UIButton!
var btn2: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
scrollView = UIScrollView(frame: self.view.frame)
scrollView.delegate = self
scrollView.contentSize = CGSize(width: 2000, height: 2000)
contentView = UIView(frame: CGRect(x: 0, y: 0, width: 2000, height: 2000))
scrollView.minimumZoomScale = 0.1
scrollView.maximumZoomScale = 4.0
scrollView.zoomScale = 1.0
for index in 1...5 {
let btn = UIButton(frame: CGRect(x: (1.0...2000.0).random(), y: (1.0...2000.0).random(), width: 50, height: 50))
btn.setTitle("btn\(index)", for: .normal)
btn.backgroundColor = .blue
btn.tag = index
btn.addTarget(self, action: #selector(tap(_:)), for: .touchDown)
contentView.addSubview(btn)
}
scrollView.addSubview(contentView)
self.view.addSubview(scrollView)
}
func tap(_ sender: UIButton) {
print(sender.frame)
if btn1 == nil {
btn1 = sender
return
}
if btn2 == nil && sender != btn1{
btn2 = sender
setZoomScaleAndOffset()
return
}
}
func setZoomScaleAndOffset() {
//变换 Offset 与 Scale 使两个按钮呈现在画面中
}
}
extension ViewController: UIScrollViewDelegate {
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return contentView
}
}
extension ClosedRange where Bound : FloatingPoint {
func random() -> Bound {
let range = self.upperBound - self.lowerBound
let randomValue = (Bound(arc4random_uniform(UINT32_MAX)) / Bound(UINT32_MAX)) * range + self.lowerBound
return randomValue
}
}