swift相册相机的权限处理示例详解

前言

最近在开发中遇到了获取相册相机权限的需求,通过查找相关的资料终于解决了,因为之后会用到所以决定记录下,下面话不多说了,来一起看看详细的介绍吧。

注意:须先在info.plist中添加两个keyNSPhotoLibraryUsageDescription, 和NSCameraUsageDescription, 内容填提示内容.

相机

// 使用
self.cameraPermissions(authorizedBlock: {
 print("打开相机")
}, deniedBlock: {
 print("没有权限使用相机")
})

// 相机权限
class func cameraPermissions(authorizedBlock: OperationBlock?, deniedBlock: OperationBlock?) {
 let authStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)

 // .notDetermined .authorized .restricted .denied
 if authStatus == .notDetermined {
  // 第一次触发授权 alert
  AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
   self.cameraPermissions(authorizedBlock: authorizedBlock, deniedBlock: deniedBlock)
  })
 } else if authStatus == .authorized {
  if authorizedBlock != nil {
   authorizedBlock!()
  }
 } else {
  if deniedBlock != nil {
   deniedBlock!()
  }
 }
}

相册

iOS9.0后ALAssetsLibrary过时了, 换成使用PHPhotoLibrary

// 使用
self.photoAlbumPermissions(authorizedBlock: {
 print("打开相册")
}, deniedBlock: {
 print("没有权限打开相册")
})

// 相册权限
class func photoAlbumPermissions(authorizedBlock: OperationBlock?, deniedBlock: OperationBlock?) {
 let authStatus = PHPhotoLibrary.authorizationStatus()

 // .notDetermined .authorized .restricted .denied
 if authStatus == .notDetermined {
  // 第一次触发授权 alert
  PHPhotoLibrary.requestAuthorization { (status:PHAuthorizationStatus) -> Void in
   self.photoAlbumPermissions(authorizedBlock: authorizedBlock, deniedBlock: deniedBlock)
  }
 } else if authStatus == .authorized {
  if authorizedBlock != nil {
   authorizedBlock!()
  }
 } else {
  if deniedBlock != nil {
   deniedBlock!()
  }
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • swift相册相机的权限处理示例详解

    前言 最近在开发中遇到了获取相册相机权限的需求,通过查找相关的资料终于解决了,因为之后会用到所以决定记录下,下面话不多说了,来一起看看详细的介绍吧. 注意:须先在info.plist中添加两个keyNSPhotoLibraryUsageDescription, 和NSCameraUsageDescription, 内容填提示内容. 相机 // 使用 self.cameraPermissions(authorizedBlock: { print("打开相机") }, deniedBloc

  • 使用 Swift Package 插件生成代码的示例详解

    目录 前言 是什么让我再次关注到它? 实施细节 让我们写一些代码吧 编写可执行文件 创建该插件 让我们看下结果 前言 不久前,我正在工作中开发一项新服务,该服务由 Swift Package 组成,该 Package 公开了一个类似于Decodable​协议,供我们应用程序的其余部分使用.事实上,该协议是从Decodable本身继承下来的,看起来像这样: Fetchable.swit protocol Fetchable: Decodable, Equatable {} 新的 package 将

  • 如何优雅地在vue中添加权限控制示例详解

    前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为这是一个工作上的业务需求,所以对于我来说主要有两个地方需要进行权限控制. 第一个是侧边菜单栏,需要控制显示与隐藏. 第二个就是页面内的各个按钮,弹窗等. 流程 1.如何获取用户权限? 后端(当前用户拥有的权限列表)-> 前端(通过后端的接口获取到,下文中我们把当前用户的权限列表叫做 permissi

  • Swift中defer关键字推迟执行示例详解

    前言 大家应该都知道,在一些语言中,有try/finally这样的控制语句,比如Java. 这种语句可以让我们在finally代码块中执行必须要执行的代码,不管之前怎样的兴风作浪. 在Swift 2.0中,Apple提供了defer关键字,让我们可以实现同样的效果. func checkSomething() { print("CheckPoint 1") doSomething() print("CheckPoint 4") } func doSomething(

  • MLSQL编译时权限控制示例详解

    前言 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界. 权限控制,对于MLSQL而言的重要程度可以说是生命线. MLSQL需要面对各式各样的资源访问,比如MySQL, Oracle,HDFS,Hive,Kafka,Sorl,ElasticSearch,Redis,API,Web等等,不同用户对这些数据源(以及表,列)的权限是不一样的. 传统模式是,每个用户都需要有个proxy user,然后到每个数据源里面给这个proxy user进行授权. 这看起来似乎就是麻

  • C++中访问权限的示例详解

    众所周知,C++面向对象的三大特性为:封装,继承和多态.下面我们就先对封装做一些简单的了解.封装是通过C++中的类来完成的,类是一种将抽象转换为用户定义类型的工具.类的定义如下: class circle { public: //成员变量 int m_L; int m_H; public: //成员函数(方法) double get_Square() { return m_L*m_H; } } 在上面的代码中,我们定义了一个 "circle" 类,主要包含三个部分:成员变量,成员方法和

  • uniapp自定义相机实现示例详解

    目录 自定义相机 起因 利用livePusher实现 使用 效果图 拓展 实现多种自定义相机 水印相机 身份证相机 人像相机 自定义相机 起因 由于最近用uniapp调用原生相机容易出现闪退问题,找了很多教程又是压缩图片又是优化代码,我表示并没有太大作用!! 于是开启了我的解决之路 利用livePusher实现 实现自定义相机 拓展性挺强的,可以实现自定义水印.身份证拍摄.人像拍摄等 这里我简单实现一个相机功能主要用于解决闪退 Tip:这里需要创建nvue文件哦~ 创建camera.nvue <

  • OpenCV实现相机标定示例详解

    目录 环境准备 相机标定 棋盘格图片 实时显示相机的画面 在线标定 实时显示相机画面,按键保存能检测到角点的 棋盘格图片 离线标定 畸变矫正 环境准备 vs2015+opencv4.10安装与配置 相机标定 棋盘格图片 可以自己生成,然后打印到A4纸上.(也可以去TB买一块,平价买亚克力板的,不反光买氧化铝材质,高精度买陶瓷的) /** * 生成棋盘格图片 **/ int generateCalibrationPicture() { //Mat frame = imread("3A4.bmp&q

  • Swift进阶教程Mirror反射示例详解

    目录 元类型与.self AnyObject AnyClass Any type(Of:) self self在方法里面的作用 Self Swift Runtime Mirror Mirror的基本用法 Mirror的简单应用-JSON解析 Mirror源码解析 Enum Metadata探索 还原TargetEnumMetadata 还原TargetEnumDescriptor 相对偏移指针 打印枚举中的属性 Struct Metadata探索 获取结构体的属性 swift_getTypeBy

  • Swift 中的 JSON 反序列化示例详解

    目录 业界常用的几种方案 手动解码方案,如 Unbox(DEPRECATED) 阿里开源的 HandyJSON 基于 Sourcery 的元编程方案 Swift build-in API Codable 属性装饰器,如 BetterCodable 各个方案优缺点对比 Codable 介绍 原理浅析 Decoder.Container 协议 自研方案 功能设计 Decoder.Container 具体实现 再议 PropertyWrapper 应用场景示例 单元测试 性能对比 业界常用的几种方案

随机推荐