【移動(dòng)應(yīng)用開發(fā)技術(shù)】AssetsLibrary框架怎么在iOS中使用_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】AssetsLibrary框架怎么在iOS中使用_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】AssetsLibrary框架怎么在iOS中使用_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】AssetsLibrary框架怎么在iOS中使用_第4頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】AssetsLibrary框架怎么在iOS中使用_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論