Swift3.0:照片选择
一、介绍
图片选择或者拍照功能:
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:照片选择的更多相关文章
- Xcode8中Swift3.0适配问题
写在前面 收到一些小伙伴的来信,觉得可能下边没有表达清楚,先把大家关心的要点在此进行总结,有兴趣的可以看看下边的研究过程,没兴趣的直接看这段即可. Xcode8支持Swift2.3和Swift3.0两 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 关于for循环------swift3.0
在程序开发当中,for循环使用的频率无疑是最高的.常用的swift循环是递增式遍历.当然各种循环,swift都能办到.但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码.在swift3 ...
- Swift2.3 --> Swift3.0 的变化
Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...
- Swift3.0语言教程字符串与文件的数据转换
Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...
- Swift3.0语法变化
写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...
- swift3.0 hello swift(1)
一直对swift感兴趣,在前段时间的新闻中,大多是swift3.0发布和xcode8.0的改进,因为改动比较大,以前使用swift2.x做项目的人,都在担心其项目从2.x迁移到3.0+的问题.以前简单 ...
- Swift2.3适配Swift3.0时出现的各种问题
昨晚上一波手贱把我的小5s升到iOS10.如此配套的话,Xcode7.3升级Xcode8.1看来也是势在必行了.公司程序是Swift2.3的,出于对苹果的恐惧迟迟不敢升级.但丑媳妇儿总要见公婆,借这个 ...
- iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)
今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UIColle ...
随机推荐
- CSS选择器优先级(转)
原文:http://www.cnblogs.com/wangfupeng1988/p/4285251.html 另外,w3c有文章介绍了CSS选择器的特定性,见https://www.w3.org/T ...
- Android Socket
Android Socket 参考资料 菜鸟教程 怎么理解TCP的面向连接和UDP的无连接 https://www.cnblogs.com/xiaomayizoe/p/5258754.html htt ...
- jquery获取系统当前时间
//判断是否在前面加0function getNow(s) { return s < 10 ? '0' + s: s;} var myDate = new Date(); var year=my ...
- 【WIN10】WIN2D——基本圖形的繪製
DEMO下載地址:http://yunpan.cn/c3iNuHFFAcr8h (提取码:8e48) 先看一個截圖: 繪製了一些基本形狀. DEMO的繪製代碼都非常簡單,不想在博客裡細說了,看代碼更為 ...
- RelativeSource的用法
绑定自身的数据 <Style TargetType="Button"> <Setter Property="Width" Value=&quo ...
- xenserver系列之安装与配置
文章内容 1 ,安装 一.选择键盘类型:US. 二.这个是欢迎界面,选择“OK”即可. 三.这个是使用协议,我们必须得接受,否则就不能继续安装了! 四.这个是警告,告诉你XenServer所需要的硬件 ...
- 20172308《Java软件结构与数据结构》第一周学习总结
教材学习内容总结 第 1 章 概述 软件质量的特征:正确性.可靠性.健壮性.可用性.可维护性.可重用性(别人写的组件自己可以拿过来用).可移植性.运行效率 数据结构:计算机存储.组织数据的方式 程序 ...
- Codeforces Round #396 (Div. 2) B. Mahmoud and a Triangle 贪心
B. Mahmoud and a Triangle 题目连接: http://codeforces.com/contest/766/problem/B Description Mahmoud has ...
- 使用Puppeteer进行数据抓取(三)——简单的示例
本文以一个示例简单的介绍一下puppeteer的用法,我们的目的是:获取我博客上的文章的前十页的所有随笔的标题和链接.由于puppeteer本身是自动化chorme,因此这里我们的步骤和手动操作浏览器 ...
- HDU 4734 F(x) (2013成都网络赛,数位DP)
F(x) Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...