UIImagePickerController

一个view controller,负责管理这种系统接口:拍照/录视频/从用户的media library选择项目。

声明

class UIImagePickerController : UINavigationController

概述:

主要负责2件事
1.管理用户交互
2.把交互的结果,分发给delegate 对象。

呈现样式,取决于你在呈现它之前,设置枚举值source type:
(UIImagePickerController.SourceType是枚举类型)
1.camera:提供一个拍照,或录视频的UI。(捕获)
2.photoLibrary或.savedPhotosAlbum :测试结果一样,提供一个选择图片,或视频的UI。(从已存储中选取)

使用步骤(使用默认的控制):
1.验证设备上的某枚举类型有效,用类方法isSourceTypeAvailable(_: ),传一个枚举类型参数。

2.检查设备只能拍照(图片),还是也可以录像。用类方法availableMediaTypes(for: ) 传参枚举类型,返回字符串类似这种Optional(“public.image”)

3.告诉控制器调整UI,根据你希望的media types (图片?视频?还是两者都要):
实例属性mediaTypes:
声明:var mediaTypes: [String] { get set }
讨论:
根据这个属性值,picker决定显示一个针对图片或视频的专用UI,或者是一个选择控件,让用户去选择UI。

当数组空,或其中的值对于设备都不是有效的时,报出异常。

当值为摄制类型时,会调用相机接口。当值为浏览类型时,属性值决定了在UI中呈现的媒体类型。

默认值是kUTTypeImage , 它指定摄制时使用相机,浏览时使用图片。
( 经测试kUTType开头的都已经弃用了,可以用第2步得到的值)

4.展示picker,基于当前控制器调用present(_:animated:completion: )方法。若是在iPad,有些特别:
camera类型:要用全屏显示,否则用popover的话不抛异常。
Photo Library( Saved Photos )类型: 要用popover ,否则抛异常.参考链接:
官方文档关于popover使用

交互完后(取消,或者选择某项,或者拍摄后),用delegate对象去dismiss关闭picker。如果是拍摄的,delegate对象可以做保存到设备的动作。

定制picker
可以自定view,实现 拍摄 中规定的方法。该自定view可以附加,也可以替换默认控件。(demo代码 )picker类UIImagePickerController 只支持肖像模式,且不能被子类化,这里的自定view是赋值给属性cameraOverlayView ,来呈现额外信息,或在相机接口和你的代码之间,管理交互。

Delegate

必须有,代理可以保存图片的元数据,和图片数据一起存到设备。

flash LED mode

可以提供控件,让用户去调整。或是选择哪个摄像头。或是在图片和视频之间切换。也可以控制属性cameraFlashMode的值为.on或.off 打开或关闭闪光灯。
(经试验,不设置时,用户自己可以切换开关 )

视频

默认10分钟最长,可以用属性videoMaximumDuration 修改。当用户分享给其他应用时,时间段和视频质量,都会有限制。
**编辑视频,**默认的相机接口,可以对之前保存的视频,编辑开头,结尾。编辑视频的UI最好使用专门的类 UIVideoEditorController
(经试验,除了专门类,我没看出默认相机可以编辑视频,哪位知道的欢迎留言呀 )

Live Photos

一个相机特性,可以记录拍照前后的动作和声音。一张这种图片用PHLivePhoto 类表示。用类 PHLivePhotoView 来展示这种图片。
当你选择了默认的kUTTypeImage类型时,结果中也会包含这种动图,但是一旦用户选择了,代理得到的只是UIImage ,即动图的图片部分。若想代理拿到完整的动图数据,类型数组要包含2个:kUTTypeImage and kUTTypeLivePhoto 。( 经测试kUTType开头的都已经弃用了,可以用第2步得到的值)代理接收

Fully-Customized 浏览

使用Photos框架( iOS 8 + )里的类。可以实现显示元数据,缩略图,MapKit and iCloud Photo Sharing

以上是对UIImagePickerController 的翻译------------------

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值