iOS9中,swift判断相机,相册权限,选取图片为头像

Posted brave-sailor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS9中,swift判断相机,相册权限,选取图片为头像相关的知识,希望对你有一定的参考价值。

ios7以后要打开手机摄像头或者相册的话都需要权限,在iOS9中更是更新了相册相关api的调用

首先新建一个swift工程,在SB中放上一个按钮,并在viewController中拖出点击事件

ok!按钮和事件设置好以后,我们来引入要用到的库,判断摄像头权限,需要引入AVFoundation.framework,搜索并进行添加

在ViewController中 import AVFoundation

并遵循以下几个代理UIImagePickerControllerDelegate,UIActionSheetDelegate,UINavigationControllerDelegate

声明我们需要的变量

    var img :UIImageView!
    var sheet:UIAlertController!

    var sourceType = UIImagePickerControllerSourceType.PhotoLibrary //将sourceType赋一个初值类型,防止调用时不赋值出现崩溃

viewDidLoad中:

override func viewDidLoad() {
        super.viewDidLoad()
        img = UIImageView(frame: CGRectMake(20, 120, 100, 100))
        self.view.addSubview(img)
       
    }

由于我们选择相册或者打开摄像头以后进行图片编辑的操作是一样的,所以我们将这段代码封装到open方法里面

//    打开图库或相机
    func open(){
        
        let imagePickerController:UIImagePickerController = UIImagePickerController()
        imagePickerController.delegate = self
        imagePickerController.allowsEditing = true//true为拍照、选择完进入图片编辑模式
        imagePickerController.sourceType = sourceType
        self.presentViewController(imagePickerController, animated: true, completion:{
            
        })
 
  }

然后我们再将判断相册权限和摄像头权限的代码封装到各自的方法中进行调用

/**
     判断相机权限
     
     - returns: 有权限返回true,没权限返回false
     */
    func cameraPermissions() -> Bool{
        
        let authStatus:AVAuthorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
        
        if(authStatus == AVAuthorizationStatus.Denied || authStatus == AVAuthorizationStatus.Restricted) {
            return false
        }else {
            return true
        }
        
    }
(相机权限的判断和OC基本一致,只是方法调用方法变化了而已)

    /**
     判断相册权限
     
     - returns: 有权限返回ture, 没权限返回false
     */
    
    func PhotoLibraryPermissions() -> Bool {
        
        let library:PHAuthorizationStatus = phphotoLibrary.authorizationStatus()
        if(library == PHAuthorizationStatus.Denied || library == PHAuthorizationStatus.Restricted){
            return false
        }else {
            return true
        }
    }

(相册权限判断这里在iOS9之前都是用的AssetsLibrary库,在iOS9之后引用的是Photos库了,虽然依然可以调用AssetsLibrary库进行判断,但会有警告Photos库的引用,import Photos就行)

接下来就是在前面拖出的按钮事件中进行代码编写了:


@IBAction func picker(sender: AnyObject) {
        
        //判断设置是否支持图片库和相机
        if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) && UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)){
        
            sheet = UIAlertController(title: nil, message: "选择获取头像方式", preferredStyle: .ActionSheet)
        
            //取消
            let cancelAction = UIAlertAction(title: "取消", style: .Cancel, handler: {(action) in
                print("取消")
            })
            sheet.addAction(cancelAction)
            
            
            //相册
            let OKAction = UIAlertAction(title: "相册", style: .Default, handler: {(action) in
                if(self.PhotoLibraryPermissions() == true){
                    self.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
                    self.open()
                }else{
                    //弹出提示框
                    self.sheet = UIAlertController(title: nil, message: "请在设置中打开相册权限", preferredStyle: .Alert)
                    
                    let tempAction = UIAlertAction(title: "确定", style: .Cancel) { (action) in
                        print("取消")
                        
                    }
                    self.sheet.addAction(tempAction)
                    self.presentViewController(self.sheet, animated: true, completion: nil)
                }
            })
            sheet.addAction(OKAction)
            
        
            //摄像头
            let destroyAction = UIAlertAction(title: "摄像头", style: .Default, handler: { (action) in
                if(self.cameraPermissions() == true){
                    self.sourceType = UIImagePickerControllerSourceType.Camera
                    self.open()
                }else {
                    //弹出提示框
                    self.sheet = UIAlertController(title: nil, message: "请在设置中打开摄像头权限", preferredStyle: .Alert)

                    let tempAction = UIAlertAction(title: "确定", style: .Cancel) { (action) in
                    }
                    self.sheet.addAction(tempAction)
                    self.presentViewController(self.sheet, animated: true, completion: nil)
                }
            })
            sheet.addAction(destroyAction)
            
        }
        
            self.presentViewController(self.sheet, animated: true, completion: nil)
}


最后


//    取消图片选择操作
    func imagePickerControllerDidCancel(picker:UIImagePickerController)
    {
        self.dismissViewControllerAnimated(true, completion: nil)
    }
    
    
    
//    选择完图片操作
    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
        img.image = image
        self.dismissViewControllerAnimated(true, completion: nil)
        
    }

注:因前面判断了相机判断,demo只能在真机上运行

附上demo链接:点击打开链接






























































































































以上是关于iOS9中,swift判断相机,相册权限,选取图片为头像的主要内容,如果未能解决你的问题,请参考以下文章

iOS相册相机(单张图片选取)

Swift-获取本地所有图片并选取(PhotosPHAssetCollectionView)

APP开发-使用Vue3+vant+html5+ 实现相机拍照,选取相册图片,裁剪图片以及提取图片中的文字等功能

APP开发-使用Vue3+vant+html5+ 实现相机拍照,选取相册图片,裁剪图片以及提取图片中的文字等功能

相机权限和相册权限 使用block 判断

APP开发-使用Vue3+vant+html5+ 实现相机拍照,选取相册图片,裁剪图片以及提取图片中的文字等功能