Photos的一些系统API(附上一个特别好用的照片选择器---swift版本)

照片选择器地址:

https://github.com/GaoQianpu/QPPhotoPickerDemo

照片选择器使用:

import UIKit

import Photos

/* 如果需要适配 iOS 10,请在info.plist中加入如下字段

 * NSCameraUsageDescription -->  我们需要使用您的相机

 * NSPhotoLibraryUsageDescription --> 我们需要访问您的相册

 * 如不添加该字段,在iOS 10环境下会直接崩溃

 */


class ViewController: UIViewController {

    //声明

    var picker:QPPhotoPickerView?

    

    overridefunc viewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor =UIColor.cyan

        QPPicker()

    }


    overridefunc didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }


    //初始化并添加

    /* 第一个参数,当前控制器

     * 第二个参数,照片选择器的frame

     */

    func QPPicker(){

        picker =QPPhotoPickerView.init(controller:self, frame: CGRect.init(x:0, y: 150, width:UIScreen.main.bounds.width, height:200))

        picker?.maxNum =9  //最大照片数量

        self.view.addSubview(picker!)

    }

    //上传

    func upLoadData(){

        var dataArray = [Data]()

        //数组中QPPhotoImageModel模型中:大图---小图---二进制Data

        for modelin (picker?.QPPhotos)! {

            dataArray.append(model.imageData!)

        }

        //上传Data数组

    }

    

}



有关import Photos的相关知识

1 PHPhotoLibrary

PHPhotoLibrary是Photos库最核心的类。它是我们的APP沟通用户照片库的桥梁。我们可以通过它增加、删除、修改用户的照片库。

1.1 身份验证

// 获取用户授权

publicclass funcauthorizationStatus() -> PHAuthorizationStatus

// 通知用户授权,首次授权时可使用

publicclass funcrequestAuthorization(handler: (PHAuthorizationStatus) -> Void)

1.2 获取共享库

// 获取用户的照片库

publicclass funcsharedPhotoLibrary() -> PHPhotoLibrary

1.3 修改照片库

// 异步修改照片库中数据
public func performChanges (changeBlock: dispatch_block_t, completionHandler: ((Bool, NSError?) -> Void)?)
// 同步修改照片库中数据
public func performChangesAndWait (changeBlock: dispatch_block_t) throws

1.4 照片库变化通知

你可以在你的app中时刻监听照片库的状态

// 注册通知

public func registerChangeObserver(observer: PHPhotoLibraryChangeObserver)

// 注销通知

public funcunregisterChangeObserver(observer: PHPhotoLibraryChangeObserver)

1.5 常量

用户的授权状态是一个枚举PHAuthorizationStatus。

publicenum PHAuthorizationStatus : Int {

case NotDetermined // 用户暂未权限认证

case Restricted // APP禁止使用相册权限认证

case Denied // 用户拒绝使用相册

case Authorized // 用户允许使用相册

}

2 用户授权

由于整个用户都是关于照片的操作,故我们可以在AppDelegate.Swift授权。修改其func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool方法。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

// Override point for customization after application launch.

print(__FUNCTION__)

switch PHPhotoLibrary.authorizationStatus() {

case PHAuthorizationStatus.NotDetermined: // 用户暂未权限认证

print("PHAuthorizationStatus.NotDetermined")

// 权限认证

PHPhotoLibrary.requestAuthorization { (status:PHAuthorizationStatus) -> Void in

print(status)

}

case PHAuthorizationStatus.Restricted: // APP禁止使用相册权限认证

print("PHAuthorizationStatus.Restricted")

case PHAuthorizationStatus.Denied: // 用户拒绝使用相册

print("PHAuthorizationStatus.Denied")

print("请进入 设置 -> 隐私 -> 相册 开启权限")

// 设置-隐私-相册

case PHAuthorizationStatus.Authorized: // 用户允许使用相册

print("PHAuthorizationStatus.Authorized")

}

returntrue

}

1 获取PHAsset

/// 从PHAssetCollection中获取PHAsset

////// - parameter assetCollection : PHAssetCollection

/// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchAssetsInAssetCollection(assetCollection: PHAssetCollection, options: PHFetchOptions?) ->PHFetchResult

/// 通过localIdentifier获取PHAsset

////// - parameter identifiers : 对应PHAsset的localIdentifier属性

/// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchAssetsWithLocalIdentifiers(identifiers: [String], options: PHFetchOptions?) ->PHFetchResult

/// 从PHAssetCollection中获取PHAsset

////// - parameter assetCollection : PHAssetCollection

/// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchKeyAssetsInAssetCollection(assetCollection: PHAssetCollection, options: PHFetchOptions?) ->PHFetchResult?

/// 通过PHAsset的burstIdentifier属性获取PHAsset

////// - parameter burstIdentifier : 对应PHAsset的burstIdentifier属性

/// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchAssetsWithBurstIdentifier(burstIdentifier: String, options: PHFetchOptions?) ->PHFetchResult

/// 从所有PHAsset中筛选PHAsset

////// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchAssetsWithOptions(options: PHFetchOptions?) ->PHFetchResult

/// 通过类型获取PHAsset

////// - parameter mediaType : PHAssetMediaType

/// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchAssetsWithMediaType(mediaType: PHAssetMediaType, options: PHFetchOptions?) ->PHFetchResult

/// 通过ALAsset的ALAssetPropertyAssetURL地址获取PHAsset

////// - parameter assetURLs : [NSURL]

/// - parameter options : PHFetchOptions

////// - returns: PHFetchResult

publicclassfunc fetchAssetsWithALAssetURLs(assetURLs: [NSURL], options: PHFetchOptions?) ->PHFetchResult

2 获取资产元数据

/// 资产类型

publicvar mediaType: PHAssetMediaType { get }

/// 资产类型细分

publicvar mediaSubtypes: PHAssetMediaSubtype { get }

/// 资产来源,如icloud、用户创建

@available(iOS9.0, *)

publicvar sourceType: PHAssetSourceType { get }

/// 像素宽

publicvar pixelWidth: Int { get }

/// 像素高

publicvar pixelHeight: Int { get }

/// 创建时间

publicvar creationDate: NSDate? { get }

/// 修改时间

publicvar modificationDate: NSDate? { get }

/// 地址

publicvar location: CLLocation? { get }

/// 视频播放时间(秒)publicvar duration: NSTimeInterval { get }

/// 是否隐藏publicvar hidden: Bool { get }

/// 是否收藏publicvar favorite: Bool { get }

3 编辑资产

/// 根据PHAssetEditOperation指定的类型判断能否编辑
/// /// - parameter editOperation : PHAssetEditOperation{Delete删除、Content内容、Properties属性}
/// /// - returns: Bool
public func canPerformEditOperation(editOperation: PHAssetEditOperation) -> Bool
/// 编辑PHAsset
/// /// - parameter options : PHContentEditingInputRequestOptions
/// - parameter completionHandler : 编辑回调
/// /// - returns: PHContentEditingInputRequestID编辑的会话标示符
@available (iOS 8.0 , *)
public func requestContentEditingInputWithOptions(options: PHContentEditingInputRequestOptions?, completionHandler: (PHContentEditingInput?, [NSObject : AnyObject]) -> Void) -> PHContentEditingInputRequestID
/// 取消编辑
/// /// - parameter requestID : PHContentEditingInputRequestID编辑的会话标示符
/// /// - returns: void
@available (iOS 8.0 , *)
public func cancelContentEditingInputRequest(requestID: PHContentEditingInputRequestID)

4 连拍图片管理

/// 连拍的唯一标示
public var burstIdentifier: String? { get }
/// 类型
public var burstSelectionTypes: PHAssetBurstSelectionType { get }
/// 是否是连拍照片
public var representsBurst: Bool { get }




你可能感兴趣的:(iOS)