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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的反射(reflection)机制_腹部反射区图解

    java的反射(reflection)机制_腹部反射区图解1.什么是java反射java的反射机制是指在运行状态中,      对于任意一个类,都能知道这个类的所有属性和方法;      对于任意一个对象,都能够调用它的任意一个属性和方法;      这种动态获取的类的信息,和动态调用对象的方法的功能就是反射机制。2.反射的作用     在运行时,构造任意一个类的对象      在运行时,判断任意一个类的完整结构,比如属性,方法,内…

    2022年10月25日
    0
  • windows下用pycharm安装tensorflow简易教程

    windows下用pycharm安装tensorflow简易教程2019.4.14更新下面的内容挺老了,建议批判性阅读,各种版本一直在变化,最好的教程,果然还是tensorflow和pytorch的英文原网。Windows下面办公还行,不是很适合开发,也就跑跑小代码。我现在一般在windows上使用SSH连接远程linux的服务器,直接使用远程配置的解释器环境(pycharm有相应SSH功能,配置一下就好),这样可以方便的开着音乐,边看资料边coding…

    2022年6月18日
    42
  • CSS 鼠标手指样式整理

    CSS 鼠标手指样式整理通过设置style属性来控制鼠标指针样式style=”cursor:*”href=”#”style=”cursor:pointer”>CSS鼠标手型效果href=”#”style=”cursor:crosshair”>CSS鼠标十字型效果href=”#”style=”cursor:help”>CSS鼠标问号效果text是移动到文本上的那种效果wait

    2022年5月24日
    98
  • thinkpad笔记本电脑指示灯图解_thinkpad笔记本关机后,指示灯还亮

    thinkpad笔记本电脑指示灯图解_thinkpad笔记本关机后,指示灯还亮顺序自左向右: 1挂起状态指示灯绿色:计算机处于挂起状态绿色且不断闪烁:计算机正在进入挂起或休眠状态,或者正在从挂起或休眠状态中恢复回来2AC电源状态指示灯绿色:计算机连接到交流电源上3电池状态指示灯绿色:电池电量在80%到100%of之间,以及电量处于20%到80%之间,正在使用中.绿色且不断闪烁:电池电量在20%到80%之间,且正在充电中.橙色:电池电量

    2022年9月16日
    0
  • plsqldev使用指南

    plsqldev使用指南1,登录后默认自动选中MyObjects 默认情况下,PLSQLDeveloper登录后,Brower里会选择Allobjects,如果你登录的用户是dba,要展开tables目录,正常情况都需要Wait几秒钟,而选择MyObjects后响应速率则是以毫秒计算的。 Tools菜单–>ObjectBrowerFilters,会打开BrowerFolders的定单窗口,…

    2022年5月9日
    40
  • math.random()随机整数_随机函数rand公式

    math.random()随机整数_随机函数rand公式Math.round(Math.random()*x);Math.round(Math.random()*(y-x)+x);Math.ceil(Math.random()*x);

    2022年8月4日
    2

发表回复

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

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