1:图片缩放
要想实现图片缩放的话需要一个scrollView来包裹住ImageView,让后将scrollView的delegate设置到ViewController身上,这样当缩放图片的时候scrollView不知道如何处理,交给scrollView的代理来处理具体逻辑,代理逻辑具体来处理是缩放哪个元素
2:点击图片弹出相册
点击图片弹出相册也是需要代理的只是UIImagePickerControllerDelegate和UINavigationControllerDelegate
下面是具体的逻辑代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// 相对父视图的位置
// print(view.bounds)
// imageView.frame = view.bounds
}
// 点击事件
@IBAction func tapImageEvent(_ sender: UITapGestureRecognizer) {
print(#function)
// 弹出系统相册
let picker = UIImagePickerController();
picker.delegate = self;
// 弹出相册
present(picker, animated: true, completion: nil)
}
// 横竖屏切换的时候会调用改方法
override func viewWillLayoutSubviews() {
print(view.bounds)
scrollView.zoomScale = 1;
scrollView.frame = view.bounds;
// 缩放图片 设置scrollView的maxZoomScale,minZoomScale,设置delegate
imageView.frame = view.bounds;
}
}
extension ViewController: UIScrollViewDelegate {
// 代理
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
// 把需要缩放的视图返回出去
imageView
}
}
extension ViewController: UIImagePickerControllerDelegate,UINavigationControllerDelegate {
// 已经完成选择图片的操作
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
scrollView.zoomScale = 1
// 弹窗消失
picker.dismiss(animated: true, completion: nil)
//
imageView.image = info[.originalImage] as? UIImage
}
}