-
PHAssetCollection 가져올 때 Type과 OS버전을 구분해서 가져오기👻 iOS 2015. 2. 27. 10:18
사진 접근 권한을 요청한 뒤에 권한이 있을 경우에만 계속 실행이 되도록 한다.
그렇지 않으면 초기 권한요청 후 데이터 없음 화면이 보여질 수 있다.
func fetchCollections() -> [PHAssetCollection] { let controller = self.navigationController as MSPhotoPickerController; var collections = [PHAssetCollection]() var album: PHFetchResult; var subtypes = controller.collectionSubtypes // has Any if contains(subtypes, PHAssetCollectionSubtype.Any) { var album: PHFetchResult; // for PHAssetCollectionType.SmartAlbumd album = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.SmartAlbum, subtype: PHAssetCollectionSubtype.Any, options: nil) album.enumerateObjectsUsingBlock { (collection, index, isStop) -> Void in collections.append(collection as PHAssetCollection) } // for PHAssetCollectionType.Album album = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.Album, subtype: PHAssetCollectionSubtype.Any, options: nil) album.enumerateObjectsUsingBlock { (collection, index, isStop) -> Void in collections.append(collection as PHAssetCollection) } } else { for i in 0 ..< subtypes.count { var type = NSNotFound; var subtype = subtypes[i]; let osVersion = (UIDevice.currentDevice().systemVersion as NSString).floatValue if 8.1 > osVersion { switch subtype { case .SmartAlbumUserLibrary, .AlbumMyPhotoStream: continue default: break } } else { switch subtype { case .SmartAlbumGeneric, .SmartAlbumRecentlyAdded: continue default: break } } switch subtype.rawValue { case 0 ..< PHAssetCollectionSubtype.SmartAlbumGeneric.rawValue: type = PHAssetCollectionType.Album.rawValue; break; case PHAssetCollectionSubtype.SmartAlbumGeneric.rawValue ..< PHAssetCollectionSubtype.Any.rawValue: type = PHAssetCollectionType.SmartAlbum.rawValue; break; default: break; } if NSNotFound != type { let collectionType = PHAssetCollectionType(rawValue: type)!; let album = PHAssetCollection.fetchAssetCollectionsWithType(collectionType, subtype: subtype, options: nil) album.enumerateObjectsUsingBlock { (collection, index, isStop) -> Void in collections.append(collection as PHAssetCollection) } } } } return collections }