swift2.0 UIImagePickerController 拍照 相册 录像

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) }

这样一个多媒体选择功能基本实现了!

Demo下载地址

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109166.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab 使用VIF存在的问题「建议收藏」

    matlab 使用VIF存在的问题「建议收藏」MinGW-w64-for32and64bitWindows-Browse/ToolchainstargettingWin64/PersonalBuilds/mingw-builds/8.1.0/threads-posix/sehatSourceForge.netAcompleteruntimeenvironmentforgcchttps://sourceforge.net/projects/mingw-w64/files/Toolchains%20targe…

    2022年5月8日
    54
  • netCMS学习笔记

    netCMS学习笔记二者关系:“netCMS”出自“风讯”,“netCMS”完全开源,有相关文档资料。“风讯”开源版删除了一些源码。学习内容:一、模板实现原理   标签   netCMS自定义了一系列标签,在模版页面中插入这些标签,在发布网页时类“NetCMS.Publish.Template”用正则表达示筛选出这些标签,然后从数据库表“NT_News”中读取相应的内容,将标签替换。   模版   模版引用的CSS,图片等路径,必需是绝对路径。   前台浏览方式   分“动态”和“静态”两种模式。   在“动态”

    2022年9月30日
    2
  • extremeDB_shiro使用详解

    extremeDB_shiro使用详解1、准备工作:下载eXtremeDB安装包(http://www.leadingtek.com.cn/)然后将安装或解压至磁盘。此时可以看到其目录下有host、include、platform和target等目录。2、用你喜欢的文本编辑器构建一数据库结构,文本内容如下:(举例说明,保存文件名为test.mco)#defineint1    signed#definein

    2022年10月10日
    6
  • Kafka常见面试题

    1什么是kafkaKafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。2为什么要使用kafka,为什么要使用消息队列缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓…

    2022年4月4日
    46
  • java高性能文件缓存_java缓存机制

    java高性能文件缓存_java缓存机制转载地址:http://blog.csdn.net/madun/article/details/8569860最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考。此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-eh…

    2022年10月4日
    3
  • 优先级队列的实现_优先级队列rabbitmq

    优先级队列的实现_优先级队列rabbitmq优先级队列的实现堆(heap)数据结构是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。相比于列表方法min,这样做的效率要高得多。使用heapq模块可以实现一个按优先级排序的队列,在这个队列上每次pop操作总是返回优先级最高的那个元素。它包含6个函数,其中前4个与堆操作直接相关。必须使用列表来表示堆对象本身。模块heapq中一些重要的函数。 函数 描述…

    2022年9月24日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号