swift2.0 UIImagePickerController 拍照 相册 录像
系统 ios9.1
语言swift2.0
在app 里最常用的功能就是多媒体选择,首先我们storyboard 创建一个button 用于触发选择事件
@IBAction func selectImageAction(sender: AnyObject) {
}
这时候通常会弹出来一个ActionSheet 上面有拍照 , 相册,录像 和取消 这几项。iOS 8 以后actionsheet 和 alertview 都统一用UIAlertController 方法调用,8.3以前actionsheet 有独立的方法 后来都废弃了。首先我们要加入actionsheet 相关delegate 如下
class ViewController: UIViewController ,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate {
}
@IBAction func selectImageAction(sender: AnyObject) {
let actionSheetController: UIAlertController = UIAlertController(title: "请选择", message:nil, preferredStyle: .ActionSheet)
//取消按钮
let cancelAction: UIAlertAction = UIAlertAction(title: "取消", style: .Cancel) { action -> Void in
//Just dismiss the action sheet
}
actionSheetController.addAction(cancelAction)
//拍照
let takePictureAction: UIAlertAction = UIAlertAction(title: "拍照", style: .Default)
{ action -> Void in
[self .initWithImagePickView("拍照")]
}
actionSheetController.addAction(takePictureAction)
//相册选择
let choosePictureAction: UIAlertAction = UIAlertAction(title: "相册", style: .Default)
{ action -> Void in
[self .initWithImagePickView("相册")]
}
actionSheetController.addAction(choosePictureAction)
//摄像
let moviePictureAction: UIAlertAction = UIAlertAction(title: "摄像", style: .Default)
{ action -> Void in
[self .initWithImagePickView("摄像")]
}
actionSheetController.addAction(moviePictureAction)
self.presentViewController(actionSheetController, animated: true, completion: nil)
}
这样我们想要的actionSheet 创建完成
仔细看上面的代码你会发现 [self .initWithImagePickView(“拍照”)]
这个函数,我通过这个函数选择imagePicker 不同的参数
首先创建一个 var imagePicker : UIImagePickerController! 对象
然后实现相关方法
func initWithImagePickView(type:NSString){
self.imagePicker = UIImagePickerController()
self.imagePicker.delegate = self;
self.imagePicker.allowsEditing = true;
switch type{
case "拍照":
self.imagePicker.sourceType = .Camera
break
case "相册":
self.imagePicker.sourceType = .PhotoLibrary
break
case "录像":
self.imagePicker.sourceType = .Camera
self.imagePicker.videoMaximumDuration = 60 * 3
self.imagePicker.videoQuality = .Type640x480
self.imagePicker.mediaTypes = [String(kUTTypeMovie)]
break
default:
print("error")
}
presentViewController(self.imagePicker, animated: true, completion: nil)
}
swift 可以支持字符串,你也可以尝试其他类型看看!一些方法跟object c 基本一样
下面实现imagepick 的 delegate 方法就可以了
如下
对了如果要引入录制视频功能话别忘记了加
MobileCoreServices.framework 库 和 import MobileCoreServices 头文件
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let mediaType = info[UIImagePickerControllerMediaType] as! String
let compareResult = CFStringCompare(mediaType as NSString!, kUTTypeMovie, CFStringCompareFlags.CompareCaseInsensitive)
//判读是否是视频还是图片
if compareResult == CFComparisonResult.CompareEqualTo {
let moviePath = info[UIImagePickerControllerMediaURL] as? NSURL
//获取路径
let moviePathString = moviePath!.relativePath
if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(moviePathString!)
{
UISaveVideoAtPathToSavedPhotosAlbum(moviePathString!, nil, nil, nil)
}
print("视频")
}
else {
print("图片")
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.imageView.image = image;
}
imagePicker.dismissViewControllerAnimated(true, completion: nil)
}
这样一个多媒体选择功能基本实现了!
swift2.0 UIImagePickerController 拍照 相册 录像的更多相关文章
- UIImagePickerController拍照/相册/录像/本地视频
1.导入系统库 #import <MobileCoreServices/MobileCoreServices.h> 2.遵守协议 <UIImagePickerControllerDe ...
- 项目实战:Qt+Ffmpeg+OpenCV相机程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- IOS UIImagePickerController(拍照或者读取相册)
UIImagePickerController ● 使用UIImagePickerController就可以进行拍照或者读取相册 ● 通过sourceType属性来决定拍照还是读取相册 ➢ UII ...
- 真正可用的安卓webview html图片上传限制突破处理(拍照+相册都可以用)
两篇起步使用webview参考文章,第一篇解除限制,但会调用外部浏览器打开链接,第二篇 覆盖shouldOverrideUrlLoading return true https://www.jb51. ...
- Android 开发 Camera类的拍照与录像
前言 在开发Android应用的时候,如果需要调用摄像头拍照或者录像,除了通过Intent调用系统现有相机应用进行拍照录像之外,还可以通过直接调用Camera硬件去去获取摄像头进行拍照录像的操作.本篇 ...
- android 拍照 相册 剪切以及显示功能
一.概述 android的 图片拍照 ,相册选图,以及图片剪切功能可以说非常常用. 尤其是图片上传功能,必然用到此功能. 而公司最近的一个项目中正好用到该功能. 记录下来以便以后再次用到,直接拿来使用 ...
- (IOS)Swift2.0 Radio 程序分析
本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源项目Swift Radio的研究心得. 项目地址:https://github.com/swiftcodex/Swift-Rad ...
- [Swift2.0系列]Defer/Guard 基础语法
1.Defer Swift2.0中加入了defer新语法声明.defer译为延缓.推迟之意.那么在Swift2.0中它将被应用于什么位置呢?比如,读取某目录下的文件内容并处理数据,你需要首先定位到文件 ...
- 总结swift 1.2适配swift2.0遇到的改变
swift1.2适配swift2.0 以下列举的是我在项目中遇到的需要修改的,基本常见的问题就没有罗列了. 1.find函数变成了为indexOf 2.sort变成了sortInPlace 3.sor ...
随机推荐
- JavaScripts学习日记——DOM
DOM Document Object Model 文档对象模型 整合js和html css.控制html文档行为.DOM就是把页面当中所有内容全部封装成对象.HTML文档中万物皆对象.1.对象的分 ...
- Eclipse,hadoop2.7.2 hadoop-eclipse-plugin.jar的制作
装好了hadoop后发现有装个eclipse的必要,于是参照文章A(http://www.powerxing.com/hadoop-build-project-using-eclipse/)进行安装, ...
- Resizable(调整大小)组件
一.加载方式 //class 加载方式 <div id="rr" class="easyui-resizable" data-options=" ...
- c标签的使用方法
1. c:forEach <c:forEach items="> 注意varStatus相当于for循环计数器,从1开始,用${varStatus.count}获得计数器的值.而 ...
- channel c3 disabled, job failed on it will be run on another channel
今天执行备份时,报错: allocated channel: c3 channel c3: sid=131 instance=orcl2 devtype=DISK RMAN-03009: fail ...
- 成员函数的const不能被修改,包括指针
#include <iostream> class A { private: std::string a; public: A(std::string b) :a(b){} const c ...
- 随笔: WC2016感想
在某些时刻,我可以体会到非常复杂的情感,这种情感神秘的来源不能被描述.它非常的复杂.你无法分清,这种情感是来源于一个个神经元控制的情感系统的一时冲动,亦或是你如实地反馈了你所正在感知的外界. 但我曾在 ...
- iOS中的UIWindow
UIWindow的作用 UIWindow主要有两个作用: 1 作为UIView视图的最顶层容器,包含所有要显示的UIView 2 传递触摸,非触摸,键盘事件,其中传递非触摸和键盘事件时,UIWindo ...
- Linux 软链接和硬链接的理解与学习
理解前提: 首先要知道 Linux任意一个文件包含2个信息:第一个信息就是文件本身存的内容,第二个信息是文件的控制信息(读写,路径,大小等等),这2个信息是分开存储的,明白这点非常重要 理解总结: L ...
- php测试题整理(0519)
1.B/S架构和C/S架构: B/S架构是依托于浏览器的网络系统,C/S架构是基于客户端的. B/S架构: 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放.互 ...