版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】AssetsLibrary框架怎么在iOS中使用
AssetsLibrary框架怎么在iOS中使用?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。一、引言AssetsLibrary框架是專門用來操作相冊相關(guān)資源的一個(gè)框架,其是iOS4到iOS9之間常使用的一個(gè)框架,在iOS9之后,系統(tǒng)系統(tǒng)了Photos框架代替了AssetsLibrary框架,但是AssetsLibrary框架依然可以使用,并且其結(jié)構(gòu)和設(shè)計(jì)思路依然值得我們進(jìn)行分析學(xué)習(xí)。二、概述AssetsLibrary框架會(huì)操作系統(tǒng)的相冊,因此首先需要進(jìn)行權(quán)限的申請(qǐng),在使用之前,首先需要在Info.plist文件中添加如下鍵值:Privacy-PhotoLibraryUsageDescriptionAssetsLibrary框架中核心的類關(guān)系如下圖所示:1.ALAssetsLibrary:代表整個(gè)設(shè)備中的照片和視頻,通過ALAssetsLibrary可以獲取和包括設(shè)備中的照片和視頻2.ALAssetsGroup:映射照片庫中的一個(gè)相冊,通過ALAssetsGroup可以獲取某個(gè)相冊的信息,相冊下的照片和視頻,同時(shí)也可以對(duì)某個(gè)相冊添加資源3.ALAsset:映射相冊中的一個(gè)照片或者視頻,通過ALAsset可以獲取某個(gè)照片或者視頻的詳細(xì)信息,獲取保存照片和視頻4.ALAssetRepresentation:ALAssetRepresentation是對(duì)ALAsset的封裝(但不是其子類),可以更方便地獲取ALAsset中的資源信息,每個(gè)ALAsset都有至少一個(gè)ALAssetRepresentation對(duì)象,可以通過default<Representation獲取.而例如使用系統(tǒng)相機(jī)拍攝的RAW+JPEG照片,則會(huì)有兩個(gè)ALAssetRepresentation對(duì)象,一個(gè)封裝了照片的RAW信息,另一個(gè)則封裝了照片的JPEG信息5.ALAssetsFilter:相當(dāng)于過濾器,有三個(gè)方法,allPhotos:獲取相冊中所有的照片.allVideos:獲取相冊中所有的視頻.allAssets:獲取照片庫中的相冊,通過ALAssetsGroup類中的setAssetsFilter來調(diào)用三、ALAssetsLibrary資源庫對(duì)象ALAssetsLibrary類用來構(gòu)建資源庫對(duì)象,這個(gè)對(duì)象用來整體操作系統(tǒng)的相冊資源,在使用它之前我們可以使用下面的方法來獲取用戶的授權(quán)情況:+
(ALAuthorizationStatus)authorizationStatus;ALAuthorizationStatus枚舉定義了用戶的授權(quán)情況,定義如下:typedef
NS_ENUM(NSInteger,
ALAuthorizationStatus)
{
ALAuthorizationStatusNotDetermined,
//
用戶尚未選擇是否授權(quán)
ALAuthorizationStatusRestricted,
//應(yīng)用尚未授權(quán)
ALAuthorizationStatusDenied),
//
用戶拒絕授權(quán)
ALAuthorizationStatusAuthorized
//
用戶已經(jīng)授權(quán)
}如果用戶尚未授權(quán)過,那么任何訪問操作都將觸發(fā)授權(quán)機(jī)制。資源庫中的資源數(shù)據(jù)是以組的方式進(jìn)行存儲(chǔ),下面代碼示例了獲取資源組的方式:
_library
=
[[ALAssetsLibrary
alloc]init];
[_library
enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup
*group,
BOOL
*stop)
{
if
(group)
{
//
遍歷相冊還未結(jié)束
//
設(shè)置過濾器
[group
setAssetsFilter:[ALAssetsFilter
allPhotos]];
if
(group.numberOfAssets)
{
NSLog(@"%@",group);
}
}
else
{
//
遍歷結(jié)束(當(dāng)group為空的時(shí)候就意味著結(jié)束)
NSLog(@"沒有相冊列表了");
}
}
failureBlock:^(NSError
*error)
{
NSLog(@"失敗");
}];上面示例的枚舉函數(shù)用來根據(jù)參數(shù)類型獲取資源組,ALAssetsGroupType參數(shù)決定獲取組的類型,可選值枚舉如下:enum
{
ALAssetsGroupLibrary
,//
編輯庫
ALAssetsGroupAlbum
,//相冊庫
ALAssetsGroupEvent
,//事件庫
ALAssetsGroupFaces
,//
iTunes同步
ALAssetsGroupSavedPhotos
,//
保存的相片
ALAssetsGroupPhotoStream
,//
The
PhotoStream
album.
ALAssetsGroupAll
,//所有庫
};枚舉過程中,我們可以過去到ALAssetsGroup類型的對(duì)象,這個(gè)對(duì)象中封裝了相片資源信息,后面會(huì)介紹。下面列舉了ALAssetsLibrary中其他常用的方法://直接通過URL來獲取資源
-
(void)assetForURL:(NSURL
*)assetURL
resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock
failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
//直接通過URL來獲取資源組
-
(void)groupForURL:(NSURL
*)groupURL
resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock
failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
//向相冊庫中添加一個(gè)新的資源組
可以自定義名稱
-
(void)addAssetsGroupAlbumWithName:(NSString
*)name
resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock
failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
//向相冊中寫入一張圖片
orientation參數(shù)設(shè)置圖片的方向
/*
typedef
NS_ENUM(NSInteger,
ALAssetOrientation)
{
ALAssetOrientationUp
,
//
向上
默認(rèn)的
ALAssetOrientationDown
,
//
向下
ALAssetOrientationLeft
,
//
向左
ALAssetOrientationRight
,
//
向右
ALAssetOrientationUpMirrored
,
//
ALAssetOrientationDownMirrored
,
//
horizontal
flip
ALAssetOrientationLeftMirrored
,
//
vertical
flip
ALAssetOrientationRightMirrored
,
//
vertical
flip
};
*/
-
(void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef
orientation:(ALAssetOrientation)orientation
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//向相冊中寫入一張圖片
并可以設(shè)置圖片的元數(shù)據(jù)
-
(void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef
metadata:(NSDictionary
*)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//向相冊中寫入圖片數(shù)據(jù)
并可以設(shè)置元數(shù)據(jù)
-
(void)writeImageDataToSavedPhotosAlbum:(NSData
*)imageData
metadata:(NSDictionary
*)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//將某個(gè)路徑的視頻寫入相冊中
-
(void)writeVideoAtPathToSavedPhotosAlbum:(NSURL
*)videoPathURL
completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
//檢查路徑中的視頻是否和相冊相兼容
-
(BOOL)videoAtPathIsCompatibleWithSavedPhotosAlbum:(NSURL
*)videoPathURL;當(dāng)資源庫改變時(shí),系統(tǒng)會(huì)發(fā)出如下通知://資源庫改變的通知
extern
NSString
*const
ALAssetsLibraryChangedNotification;通知中傳遞的信息中包含如下字段://資源庫更新
extern
NSString
*const
ALAssetLibraryUpdatedAssetsKey;
//插入組
extern
NSString
*const
ALAssetLibraryInsertedAssetGroupsKey;
//更新組
extern
NSString
*const
ALAssetLibraryUpdatedAssetGroupsKey;
//刪除組
extern
NSString
*const
ALAssetLibraryDeletedAssetGroupsKey;下面列舉了操作過程中的一些異常定義:enum
{
ALAssetsLibraryUnknownError
=
-1,
//
未知錯(cuò)誤
ALAssetsLibraryWriteFailedError
=
-3300,
//寫入錯(cuò)誤
ALAssetsLibraryWriteBusyError
=
-3301,
//
寫入繁忙
可以重試
ALAssetsLibraryWriteInvalidDataError
=
-3302,
//
無效數(shù)據(jù)
ALAssetsLibraryWriteIncompatibleDataError
=
-3303,
//
不兼容的數(shù)據(jù)
ALAssetsLibraryWriteDataEncodingError
=
-3304,
//
數(shù)據(jù)編碼錯(cuò)誤
ALAssetsLibraryWriteDiskSpaceError
=
-3305,
//
內(nèi)存不足
ALAssetsLibraryDataUnavailableError
=
-3310,
//
數(shù)據(jù)不可用
ALAssetsLibraryAccessUserDeniedError
=
-3311,
//
權(quán)限錯(cuò)誤
ALAssetsLibraryAccessGloballyDeniedError
=
-3312,
//
權(quán)限錯(cuò)誤
};四、ALAssetsGroup資源組對(duì)象資源組其實(shí)就是對(duì)應(yīng)與我們相冊中的一組資源,我們可以通過如下的方便遍歷出其中的所有資源:
_library
=
[[ALAssetsLibrary
alloc]init];
[_library
enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup
*group,
BOOL
*stop)
{
if
(group)
{
//
遍歷相冊還未結(jié)束
//
設(shè)置過濾器
[group
setAssetsFilter:[ALAssetsFilter
allPhotos]];
if
(group.numberOfAssets)
{
[group
enumerateAssetsUsingBlock:^(ALAsset
*result,
NSUInteger
index,
BOOL
*stop)
{
NSLog(@"%d:%@",index,result);
}];
}
}
else
{
//
遍歷結(jié)束(當(dāng)group為空的時(shí)候就意味著結(jié)束)
NSLog(@"沒有相冊列表了");
}
}
failureBlock:^(NSError
*error)
{
NSLog(@"失敗");
}];ALAssetsGroup中相關(guān)方法解析如下://獲取相關(guān)屬性
/*
extern
NSString
*const
ALAssetsGroupPropertyName;//組名字
extern
NSString
*const
ALAssetsGroupPropertyType;//組類型
extern
NSString
*const
ALAssetsGroupPropertyPersistentID;
//ID
extern
NSString
*const
ALAssetsGroupPropertyURL;//組URL
*/
-
(id)valueForProperty:(NSString
*)property;
//獲取當(dāng)前組的縮略圖海報(bào)
-
(CGImageRef)posterImage;
//設(shè)置過濾器
-
(void)setAssetsFilter:(ALAssetsFilter
*)filter;
//獲取組中資源個(gè)數(shù)
-
(NSInteger)numberOfAssets;
//進(jìn)行資源枚舉
-
(void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
/*
typedef
NS_OPTIONS(NSUInteger,
NSEnumerationOptions)
{
NSEnumerationConcurrent
=
(1UL
<<
0),//順序枚舉
NSEnumerationReverse
=
(1UL
<<
1),
//逆序枚舉
};
*/
-
(void)enumerateAssetsWithOptions:(NSEnumerationOptions)options
usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
-
(void)enumerateAssetsAtIndexes:(NSIndexSet
*)indexSet
options:(NSEnumerationOptions)options
usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
//獲取當(dāng)前組是否允許編輯
@property
(nonatomic,
readonly,
getter=isEditable)
BOOL
editable;
//向組中添加一個(gè)資源
-
(BOOL)addAsset:(ALAsset
*)asset;上面有提到資源過濾器,資源過濾器用來設(shè)置過濾組中的資源,有3個(gè)類方法可以直接獲取系統(tǒng)提供的過濾器:@interface
ALAssetsFilter
:
NSObject
{
//所有圖片資源
+
(ALAssetsFilter
*)allPhotos;
//
所有視頻資源
+
(ALAssetsFilter
*)allVideos;
//
所有資源
+
(ALAssetsFilter
*)allAssets;
@end五、ALAsset資源對(duì)象ALAsset是封裝好的資源對(duì)象類,如下方法可以獲取到資源中封裝的屬性:-
(id)valueForProperty:(NSString
*)property;屬性名的定義如下://獲取資源類型
/*
這個(gè)屬性將返回一個(gè)字符串
extern
NSString
*const
ALAssetTypePhoto//照片類型
extern
NSString
*const
ALAssetTypeVideo//視頻類型
extern
NSString
*const
ALAssetTypeUnknown//未知類型
*/
extern
NSString
*const
ALAssetPropertyType;
//會(huì)返回一個(gè)CLLocation對(duì)象
圖片的地址信息
extern
NSString
*const
ALAssetPropertyLocation;
//視頻資源的時(shí)長
NSNumber對(duì)象
extern
NSString
*const
ALAssetPropertyDuration;
//資源方向
extern
NSString
*const
ALAssetPropertyOrientation;
//資源日期
會(huì)返回NSDate對(duì)象
extern
NSString
*const
ALAssetPropertyDate;下面列舉了ALAsset中常用方法://獲取默認(rèn)的Representation對(duì)象
-
(ALAssetRepresentation
*)defaultRepresentation;
//獲取指定的Representation對(duì)象
-
(ALAssetRepresentation
*)representationForUTI:(NSString
*)representationUTI;
//獲取資源縮略圖
-
(CGImageRef)thumbnail;
-
(CGImageRef)aspectRatioThumbnail;
//寫入圖片數(shù)據(jù)
-
(void)writeModifiedImageDataToSavedPhotosAlbum:(NSData
*)imageData
metadata:(NSDictionary
*)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//寫入視頻數(shù)據(jù)
-
(void)writeModifiedVideoAtPathToSavedPhotosAlbum:(NSURL
*)videoPathURL
completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
//原始資源對(duì)象
@property
(nonatomic,
readonly)
ALAsset
*originalAsset;
//是否允許編輯
@property
(nonatomic,
readonly,
g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年酒店標(biāo)準(zhǔn)間設(shè)計(jì)與裝修協(xié)議范本版B版
- 2024年科技企業(yè)培訓(xùn)部門負(fù)責(zé)人聘任合同
- 2025版道路橋梁監(jiān)理合同范本3篇
- 2025版借款合同書類圖片素材60張創(chuàng)意設(shè)計(jì)集3篇
- 二零二五年大型物流倉儲(chǔ)租賃合同3篇
- 2025年度智能安全監(jiān)控平臺(tái)建設(shè)與技術(shù)服務(wù)合同2篇
- 英語班本課程設(shè)計(jì)
- 2025版住宅小區(qū)新能源汽車停車位租賃合同3篇
- 2024年高端裝備制造項(xiàng)目技術(shù)轉(zhuǎn)讓合同的保密條款和違約責(zé)任
- 2025年度搬家企業(yè)標(biāo)準(zhǔn)作業(yè)流程合同3篇
- 河北省保定市藥品零售藥店企業(yè)藥房名單目錄
- 食品安全全球標(biāo)準(zhǔn)BRCGS第9版內(nèi)部審核全套記錄
- 廣西基本醫(yī)療保險(xiǎn)門診特殊慢性病申報(bào)表
- 公路工程工程量清單計(jì)量規(guī)則18版
- 版高考語文標(biāo)準(zhǔn)作文紙
- 電鍋爐房設(shè)計(jì)規(guī)程
- 四年級(jí)心理健康 12.我也能當(dāng)家 課件(7張ppt)
- 10kV架空線路工程初步設(shè)計(jì)說明書模板
- 鍋爐汽包水位控制系統(tǒng)設(shè)計(jì)[1]
- 政務(wù)禮儀培訓(xùn)課件(PPT66頁)rar
- 水土保持常用監(jiān)測手段及方法
評(píng)論
0/150
提交評(píng)論