前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >swift2.0 UIImagePickerController 拍照 相册 录像

swift2.0 UIImagePickerController 拍照 相册 录像

作者头像
全栈程序员站长
发布2022-07-05 14:48:18
3460
发布2022-07-05 14:48:18
举报
文章被收录于专栏:全栈程序员必看

系统 ios9.1 语言swift2.0

在app 里最常用的功能就是多媒体选择,首先我们storyboard 创建一个button 用于触发选择事件

代码语言:css
复制
@IBAction func selectImageAction(sender: AnyObject) { }

这时候通常会弹出来一个ActionSheet 上面有拍照 , 相册,录像 和取消 这几项。iOS 8 以后actionsheet 和 alertview 都统一用UIAlertController 方法调用,8.3以前actionsheet 有独立的方法 后来都废弃了。首先我们要加入actionsheet 相关delegate 如下

代码语言:ruby
复制
class ViewController: UIViewController ,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate { }
代码语言:text
复制
     @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! 对象 然后实现相关方法

代码语言:text
复制
   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]) {

代码语言:c#
复制
        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.cn/109166.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年9月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档