zoukankan      html  css  js  c++  java
  • 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下载地址

  • 相关阅读:
    Python学习系列之类与对象(二十三)
    面向过程和面向对象的异同点
    js 数值精确运算使用math.js
    js实现复制 、剪切功能-clipboard.min.js 示例
    css div嵌套层中button的margin-top不起作用解决方法
    IPhone中H5页面用on绑定click无效的解决方法
    This is a good start.
    element之input输入搜索联想框
    vue + element-ui 国际化实现
    async/await 处理多个网络请求同步问题
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5149278.html
Copyright © 2011-2022 走看看