iOS 개발 의 AssetsLibrary 프레임 워 크 사용 에 대한 자세 한 설명
12328 단어 iOSAssetsLibrary
AssetsLibrary 프레임 워 크 는 앨범 관련 자원 을 전문 적 으로 조작 하 는 프레임 워 크 로 iOS 4 에서 iOS 9 사이 에 자주 사용 되 는 프레임 워 크 이다.iOS 9 이후 시스템 은 Photos 프레임 워 크 를 AssetsLibrary 프레임 워 크 를 대 체 했 지만 AssetsLibrary 프레임 워 크 는 여전히 사용 할 수 있 고 그 구조 와 디자인 방향 은 우리 가 분석 하고 학습 할 가치 가 있다.
개술
AssetsLibrary 프레임 워 크 는 시스템 의 앨범 을 운영 하기 때문에 먼저 권한 신청 이 필요 합 니 다.사용 하기 전에 먼저 Info.plist 파일 에 다음 키 를 추가 해 야 합 니 다.
Privacy - Photo Library Usage Description
AssetsLibrary 프레임 워 크 의 핵심 클래스 관 계 는 다음 그림 과 같다.
1.ALAssetsLibrary:전체 장치 의 사진 과 동 영상 을 대표 하고 ALAssetsLibrary 를 통 해 장치 의 사진 과 동 영상 을 가 져 올 수 있 습 니 다.
2.ALAssetsGroup:사진 라 이브 러 리 에 있 는 앨범 을 매 핑 합 니 다.ALAssetsGroup 을 통 해 특정한 앨범 의 정보,앨범 에 있 는 사진 과 동 영상 을 얻 을 수 있 고 특정한 앨범 에 자원 을 추가 할 수 있 습 니 다.
3.ALAsset:앨범 에 있 는 사진 이나 동 영상 을 매 핑 하고 ALAsset 를 통 해 특정한 사진 이나 동 영상 에 대한 상세 한 정 보 를 얻 고 사진 과 동 영상 을 저장 할 수 있 습 니 다.
4.ALAssetRepresentation:ALAssetRepresentation 은 ALAsset 에 대한 패키지(하위 클래스 는 아 님)로 ALAsset 의 자원 정 보 를 더욱 편리 하 게 얻 을 수 있 습 니 다.ALAsset 마다 최소 하나의 ALAssetRepresentation 대상 이 있 고 default
3.ALAssetsLibrary 자원 라 이브 러 리 대상
ALAssetsLibrary 류 는 자원 라 이브 러 리 대상 을 구축 하 는 데 사 용 됩 니 다.이 대상 은 전체 운영 체제 의 앨범 자원 에 사 용 됩 니 다.사용 하기 전에 아래 의 방법 으로 사용자 의 권한 수여 상황 을 얻 을 수 있 습 니 다.
+ (ALAuthorizationStatus)authorizationStatus;
ALAuthorizationStatus 는 사용자 의 권한 수여 상황 을 매 거 진 정 의 했 습 니 다.정 의 는 다음 과 같 습 니 다.
typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
ALAuthorizationStatusNotDetermined, //
ALAuthorizationStatusRestricted, //
ALAuthorizationStatusDenied), //
ALAuthorizationStatusAuthorized //
}
사용자 가 권한 을 부여 하지 않 았 다 면 모든 방문 작업 은 권한 수여 체 제 를 촉발 할 것 입 니 다.자원 라 이브 러 리 의 자원 데 이 터 는 그룹 방식 으로 저장 되 고 다음 코드 는 자원 그룹 을 가 져 오 는 방식 을 예시 합 니 다.
_library = [[ALAssetsLibrary alloc]init];
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) { //
//
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
if (group.numberOfAssets) {
NSLog(@"%@",group);
}
} else { // ( group )
NSLog(@" ");
}
} failureBlock:^(NSError *error) {
NSLog(@" ");
}];
위 예제 의 매 거 진 함 수 는 매개 변수 유형 에 따라 자원 그룹 을 가 져 오 는 데 사 용 됩 니 다.ALAssetsGroup Type 매개 변 수 는 그룹 을 가 져 오 는 유형 을 결정 합 니 다.선택 할 수 있 는 값 은 다음 과 같 습 니 다.
enum {
ALAssetsGroupLibrary ,//
ALAssetsGroupAlbum ,//
ALAssetsGroupEvent ,//
ALAssetsGroupFaces ,// iTunes
ALAssetsGroupSavedPhotos ,//
ALAssetsGroupPhotoStream ,// The PhotoStream album.
ALAssetsGroupAll ,//
};
매 거 과정 에서 저 희 는 과거 에 ALAssets Group 유형의 대상 에 갈 수 있 습 니 다.이 대상 에 사진 자원 정 보 를 봉 인 했 고 나중에 소개 할 것 입 니 다.다음은 ALAssetsLibrary 에서 자주 사용 하 는 방법 을 열거 했다.
// URL
- (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
// URL
- (void)groupForURL:(NSURL *)groupURL resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
//
- (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
// orientation
/*
typedef NS_ENUM(NSInteger, ALAssetOrientation) {
ALAssetOrientationUp , //
ALAssetOrientationDown , //
ALAssetOrientationLeft , //
ALAssetOrientationRight , //
ALAssetOrientationUpMirrored , //
ALAssetOrientationDownMirrored , // horizontal flip
ALAssetOrientationLeftMirrored , // vertical flip
ALAssetOrientationRightMirrored , // vertical flip
};
*/
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:(ALAssetOrientation)orientation completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//
- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//
- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
//
- (BOOL)videoAtPathIsCompatibleWithSavedPhotosAlbum:(NSURL *)videoPathURL;
자원 라 이브 러 리 가 바 뀌 었 을 때 시스템 은 다음 과 같은 통 지 를 보 냅 니 다.
//
extern NSString *const ALAssetsLibraryChangedNotification;
알림 에 전 달 된 정보 에는 다음 필드 가 포함 되 어 있 습 니 다.
//
extern NSString *const ALAssetLibraryUpdatedAssetsKey;
//
extern NSString *const ALAssetLibraryInsertedAssetGroupsKey;
//
extern NSString *const ALAssetLibraryUpdatedAssetGroupsKey;
//
extern NSString *const ALAssetLibraryDeletedAssetGroupsKey;
다음은 조작 과정 에서 의 이상 정 의 를 열거 합 니 다.
enum {
ALAssetsLibraryUnknownError = -1, //
ALAssetsLibraryWriteFailedError = -3300, //
ALAssetsLibraryWriteBusyError = -3301, //
ALAssetsLibraryWriteInvalidDataError = -3302, //
ALAssetsLibraryWriteIncompatibleDataError = -3303, //
ALAssetsLibraryWriteDataEncodingError = -3304, //
ALAssetsLibraryWriteDiskSpaceError = -3305, //
ALAssetsLibraryDataUnavailableError = -3310, //
ALAssetsLibraryAccessUserDeniedError = -3311, //
ALAssetsLibraryAccessGloballyDeniedError = -3312, //
};
4.ALAssets Group 자원 그룹 대상자원 그룹 은 사실 우리 앨범 과 대응 하 는 자원 입 니 다.우 리 는 다음 과 같은 편 의 를 통 해 그 중의 모든 자원 을 옮 겨 다 닐 수 있 습 니 다.
_library = [[ALAssetsLibrary alloc]init];
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) { //
//
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
if (group.numberOfAssets) {
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
NSLog(@"%d:%@",index,result);
}];
}
} else { // ( group )
NSLog(@" ");
}
} failureBlock:^(NSError *error) {
NSLog(@" ");
}];
ALAssets Group 의 관련 방법 은 다음 과 같 습 니 다.
//
/*
extern NSString *const ALAssetsGroupPropertyName;//
extern NSString *const ALAssetsGroupPropertyType;//
extern NSString *const ALAssetsGroupPropertyPersistentID; //ID
extern NSString *const ALAssetsGroupPropertyURL;// URL
*/
- (id)valueForProperty:(NSString *)property;
//
- (CGImageRef)posterImage;
//
- (void)setAssetsFilter:(ALAssetsFilter *)filter;
//
- (NSInteger)numberOfAssets;
//
- (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;
//
@property (nonatomic, readonly, getter=isEditable) BOOL editable;
//
- (BOOL)addAsset:(ALAsset *)asset;
위 에서 언급 한 자원 필터,자원 필 터 는 필터 그룹의 자원 을 설정 하 는 데 사 용 됩 니 다.시스템 이 제공 하 는 필 터 를 직접 가 져 올 수 있 는 세 가지 방법 이 있 습 니 다.
@interface ALAssetsFilter : NSObject {
//
+ (ALAssetsFilter *)allPhotos;
//
+ (ALAssetsFilter *)allVideos;
//
+ (ALAssetsFilter *)allAssets;
@end
5.ALAsset 자원 대상ALAsset 는 봉 인 된 자원 대상 클래스 로 다음 과 같은 방법 으로 자원 에 봉 인 된 속성 을 얻 을 수 있 습 니 다.
- (id)valueForProperty:(NSString *)property;
속성 이름 의 정 의 는 다음 과 같 습 니 다.
//
/*
extern NSString *const ALAssetTypePhoto//
extern NSString *const ALAssetTypeVideo//
extern NSString *const ALAssetTypeUnknown//
*/
extern NSString *const ALAssetPropertyType;
// CLLocation
extern NSString *const ALAssetPropertyLocation;
// NSNumber
extern NSString *const ALAssetPropertyDuration;
//
extern NSString *const ALAssetPropertyOrientation;
// NSDate
extern NSString *const ALAssetPropertyDate;
다음은 ALAsset 에서 자주 사용 하 는 방법 을 열거 했다.
// Representation
- (ALAssetRepresentation *)defaultRepresentation;
// Representation
- (ALAssetRepresentation *)representationForUTI:(NSString *)representationUTI;
//
- (CGImageRef)thumbnail;
- (CGImageRef)aspectRatioThumbnail;
//
- (void)writeModifiedImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//
- (void)writeModifiedVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
//
@property (nonatomic, readonly) ALAsset *originalAsset;
//
@property (nonatomic, readonly, getter=isEditable) BOOL editable;
//
- (void)setImageData:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
//
- (void)setVideoAtPath:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
6.ALAsset Representation 류 에 대하 여모든 ALAsset 대상 에 하나의 ALAsset Representation 대상 이 봉인 되 어 있 습 니 다.이 대상 의 역할 은 자원 에 대한 상세 한 정 보 를 얻 는 것 입 니 다.다음 과 같이 해석 합 니 다.
// UTI
- (NSString *)UTI;
//
- (CGSize)dimensions;
//
- (long long)size;
//
- (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error;
//
- (CGImageRef)fullResolutionImage;
- (CGImageRef)CGImageWithOptions:(NSDictionary *)options;
//
- (CGImageRef)fullScreenImage;
// URL
- (NSURL *)url;
//
- (NSDictionary *)metadata;
//
- (ALAssetOrientation)orientation;
//
- (float)scale;
//
- (NSString *)filename;
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.