퍼미션체크
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch( status )
{
case PHAuthorizationStatusAuthorized:
// 사용가능
break;
case PHAuthorizationStatusNotDetermined:
// 아직 결정하지 않음
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus authorizationStatus)
{
if( authorizationStatus == PHAuthorizationStatusAuthorized )
{
// 사용가능
} else {
// 사용불가
}
}];
break;
default:
// 사용불가
break;
}
이미지 매니저
PHImageManager *manager = [PHImageManager defaultManager];
request 옵션
PHImageRequestOptions *requestOptions =[PHImageRequestOptions new];
requestOptions.synchronous =
requestOptions.deliveryMode =
fetch 옵션
fetch옵션은 fetch하는 클래스에 따라 지원하는 키가 다르다.
런타임시 크래시 나면서 Unsupported sort descriptor in fetch options 이라고 표시되면, 해당 클래스가 옵션키를 지원하는지
확인해야 한다.
예를들어 PHAssetCollection 클래스는 creationDate키를 제공하지 않는다.
PHFetchOptions *options = [PHFetchOptions new];
// 정렬
options.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@“creationDate” ascending:YES] ];
// 특정 조건
options.predicate = [NSPredicate predicateWithFormat:@“creationDate > %@ AND creationDate < %@“, startDate, endDate];
fetchLimit
includeAllBurstAssets
includeHiddenAssets
includeAssetSourceTypes
에셋 가져오기
fetchAssetsWith 로 시작하는 메쏘드들은 해당 에셋들의 그룹을 반환한다. 에셋그룹의 identifier를 알고 있다면
fetchAssetsWithLocalIdentifiers 를 사용할 수 있고, 일반적인 경우 fetchAssetsWithMediaType 을 사용한다.
반환된 그룹을 enumerateObjectsUsingBlock 이나 루프를 돌며 실제 asset에 접근할 수 있다.
PHFetchResult * result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage option:requestOptions];
NSMutableArray<PHAsset *> *asset = [NSMutableArray array];
[result enumerateObjectsUsingBlock:^(id _Nonnull object, NSUInteger idx, BOOL *_Nonnull stop) {
if([object isKindOfClass:[PHAsset class]]) {
[assets addObject:object];
// 배열등 원하는 형태로 저장
}
}];
PHAssetCollection 사용해 카메라롤 가져오기
PHFetchResult *camera_roll =
[PHAssetCollection
fetchAssetCollectionWithType :PHAssetCollectionTypeSmartAlbum
subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary
options:fetchOptions];
[camera_roll enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop ) {
// 카메라롤에셋에서 전달된 PHAssetCollection으로 실제 사진의 에셋 얻기
PHFetchResult *assets = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
[assets enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if( [obj isKindOfClass:[PHAsset class]])
{
// 배열등 원하는 형태로 저장
}
}];
}];
실제 이미지 가져오기
이미지 가져와 테이블 뷰의 cell에 보이기
cell = get reusable or alloc .....
// 매니저
PHImageManager *manager = [PHImageManager defaultManager];
// 기존 작업 취소
if( cell.tag != 0 ) {
[manager cancelImagerequest:(PHImageRequestID)cell.tag];
}
// 미리 가져온 에셋 배열에서 에셋 얻기
PHAsset *asset = self.assets[indexPath.row];
// PHAsset에서 실제 이미지 얻기
cell.tag =
[manager requestImageForAsset:asset
targetSize:CGSizeMake(100.0, 100.0)
contentMode:PHImageContentModeAspectFill
options:requestOptions
resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
cell.imageView.image = result;
cell.tag = 0;
}];
// 원본사이즈 그대로 가져오려면
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
'프로그래밍 > iOS,macOS' 카테고리의 다른 글
swift - objective-c 혼합 사용 (0) | 2019.05.22 |
---|---|
ios pods google 특이한 에러 (0) | 2017.01.26 |
cocoapods 관련 내용 (0) | 2017.01.10 |
ios 크래시 로그 분석도구 symbolicatecrash 사용하기 (0) | 2016.12.14 |
UITableView , UITextView 동적 크기 변화 및 스크롤 (0) | 2016.11.24 |
NSString 문자열 관련/정규식/텍스트뷰 등... (0) | 2016.11.07 |
이것저것 Objective-C 관련 노트~ (0) | 2016.11.01 |
아이폰 시뮬레이터 로그 터미널로 보기 (0) | 2016.11.01 |
모달 뷰 (0) | 2016.10.28 |
ChildViewController (0) | 2016.10.27 |