DAY 30『 从相簿选取照片( 有裁剪照片功能 ) 』ImagePicker - Part2

在 @IBAction 里

  1. 令 vc 为 UIImagePickerController
    let vc = UIImagePickerController()
  2. 新增相簿权限
    vc.sourceType = .photoLibrary // 相簿
  3. 设定委任
    vc.delegate = self
  4. 允许用户编辑选定的图像或影像
    vc.allowsEditing = true
  5. 设定跳页
    present(vc, animated: true)

到这边会报错是正常的,因为没给它 UIImagePickerControllerDelegate
因此在专案里用 extension 去写委任

extension MainVC: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerEditedImage") ] as? UIImage{
            imageView.image = image
        }
        picker.dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
}

附上完整程序码

import UIKit

class MainVC: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.setNavigationBarHidden(true, animated: false)
    }
    @IBAction func didTapButton(_:UIButton) {
        let vc = UIImagePickerController()
        vc.sourceType = .photoLibrary
        vc.delegate = self
        vc.allowsEditing = true
        present(vc, animated: true)
    }
}

extension MainVC: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerEditedImage") ] as? UIImage{
            imageView.image = image
        }
        picker.dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
}

这样就完成从相簿选取照片的实作了!


#完赛心得

13th铁人赛到今天完赛了,终於完成连续30天的自我挑战!透过铁人赛,让自己从最基本的说明介绍开始,更扎实地打好基本功,也更了解那些官方文件未提及的面向。这30天记录了使用 swift 开发实作的过程,希望自己在完赛後,也能持续使用 swift 开发更多实作。感谢各位邦友收看!


<<:  D-03-产生模拟资料 ? NSubstitute

>>:  Dat27 Hook概观介绍

Day6 JS-Object与Inheritance

今天要来看一下在JavaScript中的Inheritance(继承)概念。继承的概念在需要重复建立...

环境配置(Day2)

因为这次需要开发的内容涉及前後端,所以环境配置的部分会分成几个部分下来讨论 此次开发相关资料如下 g...

轻松小单元 - 如何分配角色

怕爆,连假第3天就快忘记发文了,卡个位还要300字! 一般资讯单位相信都有普遍人力不足的问题,但即使...

离开是为了面对更好的自己

嗨各位大大好,我是 Robin~ 今天要来挑战一个我以前不敢写的主题, 就是职涯方面的文章。 今天会...

Day6 资料储存 - object storage基础

Object storage - 云端最流行的储存方式 Object storage和file st...