iOS_UI_ 相机 相册的图片

文章介绍了如何在iOS应用中创建一个通用的类TyeCamPicker,用于从相机或相册中获取图片。该类实现了UIImagePickerControllerDelegate和UINavigationControllerDelegate协议,支持用户编辑图片,并提供了从相机拍摄或相册选择图片的功能。
摘要由CSDN通过智能技术生成

外部 UIViewCtrl 调用: 示例

///-- 外部 UIViewCtrl 调用: 示例
/*
lazy var eTyeCamPicker : TyeCamPicker = {
    return TyeCamPicker(eVC: self)
}()

func yeOpenCam(_ eMarkInt : Int){
    if 0 == eMarkInt{
        eTyeCamPicker.yeGetImgFromCam { eImgOri, eImgEdit in
            print("---相机图片:\(String(describing: eImgEdit?.size.width))==\(String(describing: eImgEdit?.size.height))--")
        }
    }else{
        eTyeCamPicker.yeGetImgFromPhotoLibrary { eImgOri, eImgEdit in
            print("---相册图片:\(String(describing: eImgEdit?.size.width))==\(String(describing: eImgEdit?.size.height))--")
        }
    }
}
*/

相机 相册 通用类

import UIKit

class TyeCamPicker: NSObject,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
    weak var eVC : UIViewController!
    typealias YeCallback=(_ eImgOri:UIImage?, _ eImgEdit:UIImage?) -> Void
    var eFunCallback:YeCallback!
    
    init(eVC: UIViewController!) {
        self.eVC = eVC
    }
    
    ///-- 1. 从系统相册中读取图片: UIImagePickerControllerDelegate, UINavigationControllerDelegate
    func yeGetImgFromPhotoLibrary(eFun: @escaping YeCallback){
        eFunCallback = eFun
        
        ///
        let eImgPickerCtrl = UIImagePickerController() //相机/相册 拾取器;
        eImgPickerCtrl.delegate = self
        eImgPickerCtrl.allowsEditing = true // 是否允许用户编辑图片(缩放,移动,裁剪);
        eImgPickerCtrl.navigationBar.tintColor = UIColor.white //导航栏的颜色;
        eImgPickerCtrl.sourceType = UIImagePickerController.SourceType.photoLibrary //设置拾取类型:系统相册;
        
        /// 推出 拾取器:
        eVC.present(eImgPickerCtrl, animated: true, completion: nil)
    }
    
    ///-- 2. 从相机拍摄图片:  UIImagePickerControllerDelegate, UINavigationControllerDelegate
    func yeGetImgFromCam(eFun: @escaping YeCallback){
        eFunCallback = eFun
        
        /// 检测相机设备 是否可用:
        if (!UIImagePickerController.isSourceTypeAvailable(.camera)){ //不存在摄像头
            print("---没有Cam --")
          return
        }
        
        ///
        let eImgPickerCtrl = UIImagePickerController()
        eImgPickerCtrl.delegate = self
        eImgPickerCtrl.allowsEditing = true // 允许编辑相片;
        eImgPickerCtrl.sourceType = UIImagePickerController.SourceType.camera //设置从相机中获取图片;
        
        /// 
        eVC.present(eImgPickerCtrl, animated: true, completion: nil) // 推出相机;
    }
    
    
    /// 拾取器的 代理方法:  响应 拾取器完成图片拾取 事件:
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        print("---数据类型: \( info[UIImagePickerController.InfoKey.mediaType] ?? "") --")
        print("---图片路径: \( info[UIImagePickerController.InfoKey.imageURL] ?? "") --")
       
        /// 获取 原始的 和 编辑后的 图片:   .InfoKey.originalImage: 原图片; .editedImage: 编辑后的图片:
        let eImgOri = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        let eImgEdit = info[UIImagePickerController.InfoKey.editedImage] as? UIImage

        /// 返回 UIImage:
        if (nil != eFunCallback){
            eFunCallback!(eImgOri, eImgEdit)
        }

        /// 退出拾取器: 退出相册/相机;
        eVC.dismiss(animated: true, completion: nil)
    }
    
    /// 拾取器的 代理方法:  响应用户取消图片拾取的事件: 退出拾取器
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        eVC.dismiss(animated: true, completion: nil)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值