一、介绍

图片选择或者拍照功能:

1、选择相册中的图片或是拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentViewController方法推出界面显示。但是使用presentViewController的类需要实现UIImagePickerControllerDelegate、UINavigationController两个代理。

2、UIImagePickerController可以通过isSourceTypeAvailable方法来判断设备是否支持照相机/图片库/相册功能。如果支持,可以通过sourceType属性来设置图片控制器的显示类型。类型一共分为3种:PhotoLibrary(照片库)、Camera(相机)、SavedPhotoAlbum(相册)

3、实现协议截图

二、实例

1、使用相册选择步骤:

  • 判断是否支持要使用的图片库或相册功能
  • 初始化图片控制器对象
  • 指定图片控制器对象的代理
  • 指定图片控制器的类型,前提是必须先导入MobileCoreServices.framework框架
  • 弹出显示图片控制器
  • 实现图片控制住器代理方法
 func chooseImageFromAlbum(){

        //判断是否支持要使用的图片库
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { //初始化图片控制器
let picker = UIImagePickerController() //设置代理
picker.delegate = self //设置媒体类型
picker.mediaTypes = [kUTTypeImage as String,kUTTypeVideo as String] //设置允许编辑
picker.allowsEditing = true //指定图片控制器类型
picker.sourceType = .photoLibrary //弹出控制器,显示界面
self.present(picker, animated: true, completion: nil)
}
else{ let alert = UIAlertView.init(title: "读取相册错误!", message: nil, delegate: nil, cancelButtonTitle: "确定")
alert.show()
}
} //实现图片控制器代理方法
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { //查看info对象
print(info) //获取选择的原图
let originImage = info[UIImagePickerControllerOriginalImage] as! UIImage //赋值,图片视图显示图片
self.pickerView.image = originImage //图片控制器退出
picker.dismiss(animated: true, completion: nil)
} //取消图片控制器代理
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { //图片控制器退出
picker.dismiss(animated: true, completion: nil)
}

2、拍照步骤:

  • 判断是否支持拍照功能
  • 初始化图片控制器对象(可以设置是否允许编辑)
  • 指定图片控制器对象的代理
  • 指定图片控制器的类型
  • 弹出显示图片控制器
func takePhotoFromCamera() {

        //判断是否支持相机
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { //初始化图片控制器
let picker = UIImagePickerController() //设置代理
picker.delegate = self //设置媒体类型
picker.mediaTypes = [kUTTypeImage as String,kUTTypeVideo as String] //设置来源
picker.sourceType = UIImagePickerControllerSourceType.camera //设置镜头 front:前置摄像头 Rear:后置摄像头
if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.front) {
picker.cameraDevice = UIImagePickerControllerCameraDevice.front
} //设置闪光灯(On:开、Off:关、Auto:自动)
picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.on //允许编辑
picker.allowsEditing = true //打开相机
self.present(picker, animated: true, completion: nil)
}
else{ let alert = UIAlertView.init(title: "找不到相机!", message: nil, delegate: nil, cancelButtonTitle: "确定")
alert.show()
}
}

Swift3.0:照片选择的更多相关文章

  1. Xcode8中Swift3.0适配问题

    写在前面 收到一些小伙伴的来信,觉得可能下边没有表达清楚,先把大家关心的要点在此进行总结,有兴趣的可以看看下边的研究过程,没兴趣的直接看这段即可. Xcode8支持Swift2.3和Swift3.0两 ...

  2. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  3. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  4. 关于for循环------swift3.0

    在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...

  5. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  6. Swift3.0语言教程字符串与文件的数据转换

    Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...

  7. Swift3.0语法变化

    写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...

  8. swift3.0 hello swift(1)

    一直对swift感兴趣,在前段时间的新闻中,大多是swift3.0发布和xcode8.0的改进,因为改动比较大,以前使用swift2.x做项目的人,都在担心其项目从2.x迁移到3.0+的问题.以前简单 ...

  9. Swift2.3适配Swift3.0时出现的各种问题

    昨晚上一波手贱把我的小5s升到iOS10.如此配套的话,Xcode7.3升级Xcode8.1看来也是势在必行了.公司程序是Swift2.3的,出于对苹果的恐惧迟迟不敢升级.但丑媳妇儿总要见公婆,借这个 ...

  10. iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

    今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UIColle ...

随机推荐

  1. Eth-Trunk链路聚合配置

    Eth-Trunk概述 Eth-Trunk接口能够实现负载分担.增加带宽和提高可靠性 Eth-Trunk接口把多个物理接口捆绑成一个逻辑接口 Eth-Trunk接口的链路聚合模式 链路聚合模式 应用场 ...

  2. gson 生成json有\u003d异常字符处理

    只需将Gson的初始化修改为 Gson gson = new GsonBuilder().disableHtmlEscaping().create(); 连接 http://blog.csdn.net ...

  3. Winform给TextBox设置默认值(获取焦点后默认值消失)

    主要是通过TextBox的获取焦点Enter和失去焦点Leave两个事件来实现的, 思路如下: 1.设置一个字符串常量,作为TextBox的默认值: 2.在界面的构造方法中将默认值赋值给TextBox ...

  4. 模板 树上求LCA 倍增和树链剖分

    //233 模板 LCA void dfs(int x,int f){ for(int i=0;i<E[x].size();i++){ int v = E[x][i]; if(v==f)cont ...

  5. java判断集合是否重复的一种便捷方法

    内容来自其它网站,感谢原作者! import java.util.ArrayList; import java.util.HashSet; import java.util.List; /** * 通 ...

  6. OpenVPN的ipp.txt为空不生效的问题

    1.ipp.txt是分配固定IP使用的,但在tun模式下里面的ip地址不是写使用着的IP,而是30位子网中没有列举出来的启动一位,比如我要给客户机分配为10.8.0.6的IP,那么它这个文件填写的是1 ...

  7. Mac 10.12使用free命令(fish)

    前提:要使用free命令,可以安装fish shell,然后在里面安装free插件. 安装fish brew install fish 安装free fish fisher free 使用 fish ...

  8. Ubuntu · Docker —— 从入门到实践

      https://yeasy.gitbooks.io/docker_practice/appendix/repo/ubuntu.html#1604-%E7%89%88%E6%9C%AC

  9. HDU 4813 Hard Code(水题,2013年长春现场赛A题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4813 签到题. 把一个字符串按照格式输出就可以了,很水 #include <stdio.h> ...

  10. [Deepin 15] 编译安装 MySQL-5.6.35

    在 Ubuntu 下,先前一直是 二进制包解压安装,详情参考: http://www.cnblogs.com/52php/p/5680906.html 现改为 源码编译安装: #!/bin/bash ...