swift中UIImagePickerController的使用(相册、图库)

前端之家收集整理的这篇文章主要介绍了swift中UIImagePickerController的使用(相册、图库)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

源码:https://github.com/potato512/SYSwiftLearning

UIImagePickerController主要用来选择图片,或是拍照,或是录像。其中图片选择时,既可以从相册选择,也可以从图库选择。

但不管是选择图片,还是拍照,还是录像都是通过设置属性"sourceType"来实现的。

// 注意添加相关framework头文件
// 使用相机设备(AVCaptureDevice)功能时
import Photos
// 使用图片功能
import AssetsLibrary
// 使用录制视频功能
import MobileCoreServices
// MARK: 图库
func photosShow()
{
        // 是否支持图片库
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum)
        {
            if self.photosPicker == nil
            {
                // 实例化
                self.photosPicker = UIImagePickerController()
                // 图库类型
                self.photosPicker.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum
                // 代理对象(注意添加协议 UIImagePickerControllerDelegate、UINavigationControllerDelegate,及实现代理方法)
                self.photosPicker.delegate = self
                // 设置图片可编辑
                self.photosPicker.allowsEditing = true
                // 改navigationBar背景色
                self.photosPicker.navigationBar.barTintColor = UIColor.greenColor()
                // 改navigationBar标题色
                self.photosPicker.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.redColor()]
                // 改navigationBar的button字体色
                self.photosPicker.navigationBar.tintColor = UIColor.blueColor()
            }
            // 弹出图库视图控制器
            self.presentViewController(self.photosPicker,animated: true,completion: nil)
        }
        else
        {
            print("读取图库失败")
        }
}
// MARK: 相册
func imageShow()
{
        // 是否支持相册
        if UIImagePickerController.isValidImagePickerType(type: UIImagePickerType.UIImagePickerTypePhotoLibrary)
        {
            if self.imagePicker == nil
            {
                self.imagePicker = UIImagePickerController()
                self.imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
                self.imagePicker.delegate = self
                self.imagePicker.setImagePickerStyle(UIColor.brownColor(),titleColor: UIColor.greenColor(),buttonTitleColor: UIColor.yellowColor())
            }
            // 弹出图库视图控制器
            self.presentViewController(self.imagePicker,completion: nil)
        }
        else
        {
            print("读取相册失败")
        }
}
// MARK: UIImagePickerControllerDelegate,UINavigationControllerDelegate
func imagePickerController(picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        print("1 图片选择:\(info)")
        
        // 相册、图库
        if picker.isEqual(self.imagePicker) || picker.isEqual(self.photosPicker)
        {
            // 选择的图片参数
            /*
            指定用户选择的媒体类型 UIImagePickerControllerMediaType
            原始图片 UIImagePickerControllerOriginalImage
            修改后的图片 UIImagePickerControllerEditedImage
            裁剪尺寸 UIImagePickerControllerCropRect
            媒体的URL UIImagePickerControllerMediaURL
            原件的URL UIImagePickerControllerReferenceURL
            当来数据来源是照相机的时候这个值才有效 UIImagePickerControllerMediaMetadata
            */
            
            // 获取选择的原图
            let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
            print(pickedImage)
            
            // 获取选择的图片引用路径(注意:添加类 import Photos)
            let pickedURL:NSURL = info[UIImagePickerControllerReferenceURL] as! NSURL
            let fetchResult:PHFetchResult = PHAsset.fetchAssetsWithALAssetURLs([pickedURL],options: nil)
            let asset:PHAsset = fetchResult.firstObject as! PHAsset
            PHImageManager.defaultManager().requestImageDataForAsset(asset,options: nil,resultHandler: {
                    (imageData: NSData?,dataUTI: String?,orientation: UIImageOrientation,info: [NSObject : AnyObject]?) in
                    //获取实际路径
                    let imageNSURL: NSURL = info!["PHImageFileURLKey"] as! NSURL
                    print("路径:",imageNSURL)
                    print("文件名:",imageNSURL.lastPathComponent)
                })
            
            // 显示图片
            self.imageview.image = pickedImage
            
            // 图片保存到相册
            // UIImageWriteToSavedPhotosAlbum(pickedImage,self,Selector("imageSave:error:contextInfo:"),nil)
        }
        
        // 退出图片选择控制器
        picker.dismissViewControllerAnimated(true,completion: nil)
}
    
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        print("2 放弃图片选择")
        
        // 退出图片选择控制器
        picker.dismissViewControllerAnimated(true,completion: nil)
}

// 扩展类方法

import Foundation
import UIKit
import Photos

/// 相片选择器类型:相册 PhotoLibrary,图库 SavedPhotosAlbum,相机 Camera,前置摄像头 Front,后置摄像头 Rear
public enum UIImagePickerType:Int
{
    /// 相册 PhotoLibrary
    case UIImagePickerTypePhotoLibrary = 1
    
    /// 图库 SavedPhotosAlbum
    case UIImagePickerTypeSavedPhotosAlbum = 2
    
    /// 相机 Camera
    case UIImagePickerTypeCamera = 3
    
    /// 前置摄像头 Front
    case UIImagePickerTypeCameraFront = 4
    
    /// 后置摄像头 Rear
    case UIImagePickerTypeCameraRear = 5
}

extension UIImagePickerController
{    
    // MARK: - 设备使用有效性判断
    // 相册 PhotoLibrary,图库 SavedPhotosAlbum,相机 Camera,前置摄像头 Front,后置摄像头 Rear
    public class func isValidImagePickerType(type imagePickerType:UIImagePickerType) -> Bool
    {
        switch imagePickerType
        {
        case .UIImagePickerTypePhotoLibrary:
            if self.isValidPhotoLibrary
            {
                return true
            }
            return false
            
            break
            
        case .UIImagePickerTypeSavedPhotosAlbum:
            if self.isValidSavedPhotosAlbum
            {
                return true
            }
            return false
            
            break
            
        case .UIImagePickerTypeCamera:
            if self.isValidCameraEnable && self.isValidCamera
            {
                return true
            }
            return false
            
            break
            
        case .UIImagePickerTypeCameraFront:
            if self.isValidCameraEnable && self.isValidCameraFront
            {
                return true
            }
            return false
            
            break
            
        case .UIImagePickerTypeCameraRear:
            if self.isValidCamera && self.isValidCameraRear
            {
                return true
            }
            return false
            
            break
            
        default: return false
        }
    }
    
    /// 相机设备是否启用
    public class var isValidCameraEnable:Bool
    {
        get
        {
            let cameraStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeAudio)
            if cameraStatus == AVAuthorizationStatus.Denied
            {
                return false
            }
            
            return true
        }
    }
    
    /// 相机Camera是否可用(是否有摄像头)
    public class var isValidCamera:Bool
    {
        get
        {
            if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
            {
                return true
            }
            
            return false
        }
    }
    
    /// 前置相机是否可用
    public class var isValidCameraFront:Bool
    {
        get
        {
            if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front)
            {
                return true
            }
            
            return false
        }
    }
    
    /// 后置相机是否可用
    public class var isValidCameraRear:Bool
    {
        get
        {
            if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear)
            {
                return true
            }
            
            return false
        }
    }
    
    /// 相册PhotoLibrary是否可用
    public class var isValidPhotoLibrary:Bool
    {
        get
        {
            if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)
            {
                return true
            }
            
            return false
        }
    }
    
    /// 图库SavedPhotosAlbum是否可用
    public class var isValidSavedPhotosAlbum:Bool
    {
        get
        {
            if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum)
            {
                return true
            }
            
            return false
        }
    }
    
    
    // MARK: - 属性设置
    func setImagePickerStyle(bgroundColor:UIColor,titleColor:UIColor,buttonTitleColor:UIColor)
    {
        // 改navigationBar背景色
        if let bgroundColorTmp:UIColor = bgroundColor
        {
            self.navigationBar.barTintColor = bgroundColorTmp
        }
        
        // 改navigationBar标题色
        if let titleColorTmp:UIColor = titleColor
        {
            self.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: titleColorTmp]
        }
        
        // 改navigationBar的button字体色
        if let buttonTitleColorTmp:UIColor = buttonTitleColor
        {
            self.navigationBar.tintColor = buttonTitleColorTmp
        }
    }
}



需要注意:在使用过程中可能会出现UIImagePickerController的标题和按钮的字体为英文,可以通过修改配置信息实现中文显示


修改方法

1、添加中文语言包


2、修改手机或模拟器的语言

3、info.plist配置修改

原文链接:https://www.f2er.com/swift/322805.html

猜你在找的Swift相关文章