背景介绍
出于项目需求,需要基于iphone设备内图片及音乐、视频资源完成一些功能。功能包括以几点:1.需要在APP内获得并处理iphone设备内的图片、音频和视频;2.在APP内嵌入拍照入口,可以拍照并展示图片。
开发过程是学习的过程也是解决问题的过程,因此笔者对开发过程中涉及到的iphone设备内图片、音视频获取以及拍照过程中遇到的图片方向问题进行了整理和分析。
开发环境:Xcode10
一、获取本地图片、音乐、视频
iphone设备内相册存储了所有的图片和通过相机拍摄的视频,itunes的资料库存储了所有的音乐和部分视频。
头文件引用:
#import <Photos/Photos.h>
遍历相册,获取相册内的图片和视频
app若想要访问相册,需要获得用户的授权。开发时,要在info.plist文件内添加以下内容,这样在app启动后,系统会提示用户是否授权访问相关资源:
<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要访问相册,用于保存图片</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>如果不允许,您将无法在XXX中使用系统相册</string>
访问相册前,需要判断APP是否具有访问相册权限的权限:
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
//status == PHAuthorizationStatusDenied 用户已经明确否认了权限的访问
//status == PHAuthorizationStatusRestricted 此应用程序没有被授权访问的照片数据
//status == PHAuthorizationStatusNotDetermined 用户尚未做出选择这个应用程序的问候
//status == PHAuthorizationStatusAuthorized 用户已经授权应用访问照片数据
}];
获取权限后,便可以访问相册内所有系统相册及用户自定义相册,photos提供的相册种类很多,如下所示:
typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
PHAssetCollectionTypeAlbum = 1,
PHAssetCollectionTypeSmartAlbum = 2,
PHAssetCollectionTypeMoment = 3,
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
typedef NS_ENUM(NSInteger, PHAssetCollectionSubtype) {
// PHAssetCollectionTypeAlbum regular subtypes
PHAssetCollectionSubtypeAlbumRegular = 2,
PHAssetCollectionSubtypeAlbumSyncedEvent = 3,
PHAssetCollectionSubtypeAlbumSyncedFaces = 4,
PHAssetCollectionSubtypeAlbumSyncedAlbum = 5,
PHAssetCollectionSubtypeAlbumImported = 6,
// PHAssetCollectionTypeAlbum shared subtypes
PHAssetCollectionSubtypeAlbumMyPhotoStream = 100,