首页 > 编程语言 > 详细

Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)

时间:2019-02-16 12:32:19      阅读:396      评论:0      收藏:0      [点我收藏+]

(本文代码已升级至Swift4)

 

有时我们需要从系统相册中选择视频录像,来进行编辑或者上传操作,这时使用 UIImagePickerController 就可以实现。

默认情况下,UIImagePickerController 打开系统“照片”后允许用户选择所有的媒体文件(不管是照片还是录像),我们可以通过 mediaTypes 属性设置。让其只显示视频录像。

 

1,样例说明

(1)下面样例点击“选择视频”按钮后,会自动打开相册选择视频。

(2)由于设置了 mediaTypes,所有的图片都会过滤掉,只留下视频选择。

(3)选择完毕,系统会自动将视频复制一个到应用的 tmp 文件夹(临时文件夹)下。我们可以直接对这个文件进行操作,而不会影响到系统相册中的原视频。

(4)本样例选择后,就直接使用 AVPlayerViewController 进行播放。

 

2,效果图

 技术分享图片 技术分享图片 技术分享图片

 

可以看到选择后,视频会被复制到 tmp 目录下:

技术分享图片

 

选择完毕后自动播放该视频:

技术分享图片

 

3,样例代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

import UIKit

import MobileCoreServices

import AssetsLibrary

import AVKit

import AVFoundation

 

class ViewController: UIViewController,  UIImagePickerControllerDelegate,

UINavigationControllerDelegate{

     

    override func viewDidLoad() {

        super.viewDidLoad()

         

        //创建一个ContactAdd类型的按钮

        let button:UIButton = UIButton(type:.system)

        button.frame = CGRect(x:10, y:150, width:100, height:30)

        button.setTitle("选择视频", for:.normal)

        button.addTarget(self, action:#selector(selectVideo), for:.touchUpInside)

        self.view.addSubview(button)

    }

     

    //选择视频

    @objc func selectVideo() {

        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {

            //初始化图片控制器

            let imagePicker = UIImagePickerController()

            //设置代理

            imagePicker.delegate = self

            //指定图片控制器类型

            imagePicker.sourceType = .photoLibrary

            //只显示视频类型的文件

            imagePicker.mediaTypes = [kUTTypeMovie as String]

            //不需要编辑

            imagePicker.allowsEditing = false

            //弹出控制器,显示界面

            self.present(imagePicker, animated: true, completion: nil)

        }

        else {

            print("读取相册错误")

        }

    }

     

    //选择视频成功后代理

    func imagePickerController(_ picker: UIImagePickerController,

                               didFinishPickingMediaWithInfo info: [String : Any]) {

        //获取视频路径(选择后视频会自动复制到app临时文件夹下)

        let videoURL = info[UIImagePickerControllerMediaURL] as! URL

        let pathString = videoURL.relativePath

        print("视频地址:\(pathString)")

         

        //图片控制器退出

        self.dismiss(animated: true, completion: {})

         

        //播放视频文件

        reviewVideo(videoURL)

    }

     

    //视频播放

    func reviewVideo(_ videoURL: URL) {

        //定义一个视频播放器,通过本地文件路径初始化

        let player = AVPlayer(url: videoURL)

        let playerViewController = AVPlayerViewController()

        playerViewController.player = player

        self.present(playerViewController, animated: true) {

            playerViewController.player!.play()

        }

    }

     

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

}

 

原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1192.html

 

Swift3.0:照片选择

 

一、介绍

 图片选择或者拍照功能:

 1、选择相册中的图片或是拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentViewController方法推出界面显示。但是使用presentViewController的类需要实现UIImagePickerControllerDelegate、UINavigationController两个代理。

 2、UIImagePickerController可以通过isSourceTypeAvailable方法来判断设备是否支持照相机/图片库/相册功能。如果支持,可以通过sourceType属性来设置图片控制器的显示类型。类型一共分为3种:PhotoLibrary(照片库)、Camera(相机)、SavedPhotoAlbum(相册)

3、实现协议截图

技术分享图片

 

二、实例

1、使用相册选择步骤:

  • 判断是否支持要使用的图片库或相册功能
  • 初始化图片控制器对象
  • 指定图片控制器对象的代理
  • 指定图片控制器的类型,前提是必须先导入MobileCoreServices.framework框架
  • 弹出显示图片控制器
  • 实现图片控制住器代理方法

技术分享图片

 func chooseImageFromAlbum(){

        

        //判断是否支持要使用的图片库

        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {

            

            //初始化图片控制器

            let picker = UIImagePickerController()

            

            //设置代理

            picker.delegate = self

            

            //设置媒体类型

            picker.mediaTypes = [kUTTypeImage as String,kUTTypeVideo as String]

            

            //设置允许编辑

            picker.allowsEditing = true

            

            //指定图片控制器类型

            picker.sourceType = .photoLibrary

            

            //弹出控制器,显示界面

            self.present(picker, animated: true, completion: nil)

        }

        else{

            

            let alert = UIAlertView.init(title: "读取相册错误!", message: nil, delegate: nil, cancelButtonTitle: "确定")

            alert.show()

        }

    }

    

 //实现图片控制器代理方法

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        

        //查看info对象

        print(info)

        

        //获取选择的原图

        let originImage = info[UIImagePickerControllerOriginalImage] as! UIImage

        

        //赋值,图片视图显示图片

        self.pickerView.image = originImage

        

        //图片控制器退出

        picker.dismiss(animated: true, completion: nil)

    }

    

    //取消图片控制器代理

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {

        

        //图片控制器退出

        picker.dismiss(animated: true, completion: nil)

    }

技术分享图片

2、拍照步骤:

  • 判断是否支持拍照功能
  • 初始化图片控制器对象(可以设置是否允许编辑)
  • 指定图片控制器对象的代理
  • 指定图片控制器的类型
  • 弹出显示图片控制器

技术分享图片

func takePhotoFromCamera() {

        

        //判断是否支持相机

        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {

            

            //初始化图片控制器

            let picker = UIImagePickerController()

            

            //设置代理

            picker.delegate = self

            

            //设置媒体类型

            picker.mediaTypes = [kUTTypeImage as String,kUTTypeVideo as String]

            

            //设置来源

            picker.sourceType = UIImagePickerControllerSourceType.camera

            

            //设置镜头 front:前置摄像头  Rear:后置摄像头

            if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.front) {

                picker.cameraDevice = UIImagePickerControllerCameraDevice.front

            }

            

            //设置闪光灯(On:开、Off:关、Auto:自动)

            picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.on

            

            //允许编辑

            picker.allowsEditing = true

            

            //打开相机

            self.present(picker, animated: true, completion: nil)

        }

        else{

            

            let alert = UIAlertView.init(title: "找不到相机!", message: nil, delegate: nil, cancelButtonTitle: "确定")

            alert.show()

        }

    }

技术分享图片

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!

Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)

原文:https://www.cnblogs.com/sundaysme/p/10387207.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!