MediaPicker是iOS中的所有选择器

嗨,大家好。 今天,我有一份与在iOS应用程序中访问文件有关的工作。 因此,我在Google,堆栈溢出,中等博客等方面进行了研究。 我遇到了一个博客,该博客写了关于如何在相机中拍照或在iOS应用程序中访问图像的方法,然后阅读了。 我认为,如果我使用它来选择iPhone或iPad中的许多类型的文件,那也许很棒。 所以我写了这个模块,需要公开这些知识。 我们开始做吧!!!!

第1节:

通过使用名称“ MediaPicker.swift”在Xcode Project中创建文件。

第2部分:

声明的类名称为MediaPicker。

 导入UIKit 
导入MobileCoreServicesclass MediaPicker:NSObject {//继承NSObject}

第3部分:

按照名称“ MediaType”创建枚举,以用于要使用的文件的句柄类型以及您可以编写的基本类型,如下所示。

 枚举MediaType {案例图片案例媒体案例全部} 

第4节:

通过名称“ Constants”创建新的Struct,以用于定义每个事件或按钮的名称,并使用户易于理解。 在现实生活中,通过“常量”可以存储字符串,文本,措辞等……它的好处是您需要存储1值并在许多控制器中使用(假设值是“测试”)。 如果您不存储在“常量”中,则必须在许多控制器中编写“测试”,但是如果您像Thanos那样坚强,那就没关系了。

没关系,你是否像Thanos一样坚强哈哈。

糟糕,要编辑此值吗? 你好吗? 您必须在编写的每个控制器中进行编辑。 你累了吗?

我一直强调自己,我必须在“常量”中写一个常量值。 好吧,加油!

该“常数”的价值如下。

  struct常量{static let camera =“ Camera” static let gallery =“ Gallery” static let video =“ Video”静态let file =“ File”静态let cancel =“ Cancel”静态let documentTypes = [“ com.microsoft.word。 doc”,“ public.data”,“ org.openxmlformats.wordprocessingml.document”,kUTTypePDF作为字符串] //用于指定需要提取的类型} 

第5节:

声明变量如下。

 静态让共享:MediaPicker = MediaPicker()// Singleton Patternfileprivate var currentViewController:UIViewController!  var imagePickerBlock:(((_ image:UIImage)-> Void)?var videoPickerBlock:((_ data:Data?)-> Void)?var filePickerBlock:((_ URL:URL)-> Void)? 

imagePickerBlock →选择或捕获的图像完成后,将返回图像的值:UIImage

videoPickerBlock →当您在图库中选择视频完成时,它将返回数据值:Data

filePickerBlock →当您在iCloud,Google Drive,Dropbox等中选择文件时…完成后,它将返回url的值:URL

currentViewController →是用于存储当前viewController显示的变量,它将呈现UIImagePickerController或UIDocumentMenuViewController

第6节:

创建函数如下

  1. 相机 →在需要拍照时使用。
  fileprivate func camera(){如果UIImagePickerController.isSourceTypeAvailable(.camera){让pickerController = UIImagePickerController()pickerController.delegate = self;  pickerController.sourceType = .camera currentViewController.present(pickerController,动画:true,完成:nil)}} 

2. PhotoLibrary→用于需要访问图库中的图片时使用。

  fileprivate func photoLibrary(){如果UIImagePickerController.isSourceTypeAvailable(.photoLibrary){让pickerController = UIImagePickerController()pickerController.delegate = self;  pickerController.sourceType = .photoLibrary currentViewController.present(pickerController,动画:true,完成:nil)}} 

3. 视频 →用于需要访问图库中的视频时使用。

  fileprivate func video(){如果UIImagePickerController.isSourceTypeAvailable(.photoLibrary){让pickerController = UIImagePickerController()pickerController.delegate = self pickerController.sourceType = .photoLibrary pickerController.mediaTypes = [kUTTypeMovie as String,kUTTypeVideo as String] currentViewController.present(picker ,动画:true,完成:nil)}} 

4. 文件 →用于需要从iCloud,Google云端硬盘,Dropbox等显示或发送文件时使用…,您可以按照我的指示进行操作。

4.1 转到Xcode中的Targets Project文件。

4.2 选择功能。

4.3 开启iCloud。

这很容易!!!

不要为了得到这个功能。

  fileprivate func file(){让importMenuViewController = UIDocumentMenuViewController(documentTypes:Constants.documentTypes,in:.import)importMenuViewController.delegate = self importMenuViewController.modalPresentationStyle = .formSheet currentViewController.present(importMenuViewController,动画:true,完成:无)} 

第6节:

创建ActionSheet函数以选择所需的文件。

  func showActionSheet(viewController:UIViewController,type:MediaType){currentViewController = viewController let actionSheet = UIAlertController(title:nil,message:nil,preferredStyle:.actionSheet)let camera = UIAlertAction(title:Constants.camera,style:.default,handler :{(动作)-> self.camera()中的空隙()))let gallery = UIAlertAction(标题:Constants.gallery,style:.default,handler:{(动作)-> self.photoLibrary()中的空隙video = UIAlertAction(title:Constants.video,style:.default,handler:{(action)-> self.video()中的Void)) 
let file = UIAlertAction(title:Constants.file,style:.default,handler:{(action)-> self.file()中的Void))let cancel = UIAlertAction(title:Constants.cancel,style:.cancel,handler :nil)actionSheet.addAction(camera)actionSheet.addAction(gallery)如果type == .media {actionSheet.addAction(video)}否则,如果type == .all {actionSheet.addAction(video)actionSheet.addAction(file)} actionSheet.addAction(cancel)viewController.present(actionSheet,动画:true,完成:nil)}

通过此功能,您必须输入两个参数。

viewController →是您当前的viewController。

类型 →是枚举“ MediaType”,您必须按照需要选择类型

currentViewController的此功能将显示一个根据您指定的类型的操作表。

图片 →仅显示相机和图库。

media →将根据.image显示并增加视频类型。

全部 →将在模块中显示全部。

第7节:

实施从图库中拾取图像的协议,并从相机拍摄照片。

UIImagePickerControllerDelegate,UINavigationControllerDelegate )。

  扩展 MediaPicker:UIImagePickerControllerDelegate,UINavigationControllerDelegate { func imagePickerControllerDidCancel(_ picker:UIImagePickerController){currentViewController.dismiss(animated:true,completion: nil )} func imagePickerController(_ picker:UIImagePickerController,didFinishPickingMediaWithInfo信息:[:String =信息[UIImagePickerControllerOriginalImage]  ?  UIImage {imagePickerBlock?(image)//如果不为null则返回图像} 否则 {print(“出问题了”)} 如果  videoUrl = info [UIImagePickerControllerMediaType]  ? 网址{ 数据= 尝试 ?  Data(contentsOf:videoUrl)videoPickerBlock?(data)//返回不为null时的视频URL} else {print(“出问题的地方”)} currentViewController.dismiss(动画:true,完成: nil )}} 

第8节:

在iPhone,iPad的每个驱动器中实现Pick文件的协议。

(UIDocumentMenuDelegate,UIDocumentPickerDelegate)

  扩展名 MediaPicker:UIDocumentMenuDelegate,UIDocumentPickerDelegate { func documentMenu(_ documentMenu:UIDocumentMenuViewController,didPickDocumentPicker documentPicker:UIDocumentPickerViewController){documentPicker.delegate = self currentViewController.present(documentPicker,动画:true,完成: nil )} func documentPicker(_ controller,didDocumentPickerDelegate url:URL){filePickerBlock?(url)//返回文件url(如果从驱动器中选择)。  } func documentMenuWasCancelled(_ documentMenu:UIDocumentMenuViewController){currentViewController.dismiss(动画:true,完成: nil )}} 

第9节:

最后一步,您必须在Xcode项目中打开info.plist。 通过如下写出规定值

  1. →隐私–相机使用说明, →$(PRODUCT_NAME)相机使用。
  2. →隐私–照片库使用说明, →$(PRODUCT_NAME)照片使用。

第10节:

如何使用。

  MockupViewController类:UIViewController { 
私人var图片:UIImage?
私人var视频:数据?
私有var文件:URL? 覆盖基金viewDidLoad(){super.viewDidLoad()
MediaPicker.shared.showActionSheet(viewController:self,type:.all)//接收图像
MediaPicker.shared.imagePickerBlock = {(image)-> Void in
self.image = image} //接收视频
MediaPicker.shared.videoPickerBlock = {(视频)->无效
self.video = video} //接收文件
MediaPicker.shared.filePickerBlock = {(文件)-> self.file =文件中的空隙
}}
}

太神奇了,太简单了!

我希望这个博客对那些想研究如何在iOS应用程序中访问文件的人有用。 如果您喜欢此博客,则可以为我鼓掌并分享此博客。

享受编码。