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

摘要:
在iOS9 7之后,您需要获得打开移动相机或相册的许可。在iOS7 9中,您已经更新了相册相关api的调用。首先,创建一个swift项目,在SB中放置一个按钮,然后在viewController中拖动单击事件。好啊

在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判断相机,相册权限,选取图片为头像》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(项目)使用接口自动登陆滴滴打码网站DB2 数据类型转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)

一、背景 1.1概念定义 我们这里想要实现的图像拼接,既不是如题图1和2这样的“图片艺术拼接”,也不是如图3这样的“显示拼接”,而是实现类似“BaiDU全景”这样的全部的或者部分的实际场景的重新回放。 对于图像拼接的流程有很多定义方式,本教程中主要介绍实现主流方法,总结梳理如下: 图像采集->投影变换->特征点匹配...

iOS14 SceneKit Camera 的视角

fieldOfView 是什么 在SceneKit里,我们需要可以调整相机的视角,显示不同内容。看下图很好理解: 但是iOS14里, SCNCamera的xFov,yFov属性都被废弃了,用 fieldOfView 和projectionDirection代替:当projectionDirection为水平方向时,设置fieldOfView就代表设置了xF...

APS-C画幅三强宾得K3、佳能70D、尼康D7100关键参数对比

理光正式发布宾得新旗舰单反K-3,搭载APS-C格式2400万像素无低通滤镜传感器,PRIME III图像处理器,感光度范围ISO 100-51200,最高连拍速度8.3fps。相机延续了宾得全金属三防机身特性,并将对焦系统升级至SAFOX 11,焦点数量扩展至27点,8.6万像素RGB测光传感器,双SD卡槽。   作为宾得K5 II(资料 图片...

【WP7】关于相机应用程序

在WP OS7.1中,允许我们通过编程的方式访问设备相机,可以通过访问部分API通过相机获取图像 1、把相机获取图像显示在屏幕上   新建一个画布,用于显示相机获取到的图像数据  <Canvas x:Name="cameraViewCanvas" Width="400" Margin="28,4,28,284"> <Canvas....

Android 多媒体------相机

一.拍照 1.设置使用相机权限 为了让用户知道我们的应用需要依赖相机,在Manifest清单文件中添加<uses-feature>标签: <manifest ... > <uses-feature android:name="android.hardware.camera" andr...

SecureCrt使用SSH2登陆海康相机

海康相机登陆SSH2: 1.安装SecureCRT2.登陆到相机,系统-安全管理-安全服务,勾选启用SSh3,打开SecureCRT,快速链接4.选择协议SSh2,主机Ip填入相机IP,端口默认22,用户名admin,点击链接5.弹出一个框,输入相机的密码6.登陆成功,出现linux的命令行摸样7.点击下面(或者直接输入outputOpen)的output...