• ALAssetsGroupSavedPhotos — группы, содержащие снимки, которые сохранены в библиотеке фотографий. На устройстве iOS эти ресурсы доступны также через приложение Photos (Фотографии);
• ALAssetsGroupAll — все группы, доступные в библиотеке ресурсов.
Теперь напишем простое приложение, которое будет получать данные о первом изображении, найденном в библиотеке ресурсов, создавать UIImageView с этим изображением, а потом добавлять это изображение в вид того контроллера вида, который отображается в настоящий момент. На данном примере мы научимся считывать содержимое ресурса, используя его представление.
Когда контроллер вида отображает свой вид, мы инициализируем объект библиотеки ресурсов и начнем перечисление ресурсов в этой библиотеке, пока не найдем первую фотографию. На данном этапе будем использовать представление этого ресурса (фотографии), чтобы отобразить фотографию в виде с изображением:
— (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear: animated];
static BOOL beenHereBefore = NO;
if (beenHereBefore){
/* Отображаем элемент для выбора даты только после того, как вызывается
метод viewDidAppear:, что происходит при каждом отображении вида
нашего контроллера вида */
return;
} else {
beenHereBefore = YES;
}
self.assetsLibrary = [[ALAssetsLibrary alloc] init];
dispatch_queue_t dispatchQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(dispatchQueue, ^(void) {
[self.assetsLibrary
enumerateGroupsWithTypes: ALAssetsGroupAll
usingBlock: ^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsUsingBlock: ^(ALAsset *result,
NSUInteger index,
BOOL *stop) {
__block BOOL foundThePhoto = NO;
if (foundThePhoto){
*stop = YES;
}
/* Получаем тип ресурса. */
NSString *assetType = [result
valueForProperty: ALAssetPropertyType];
if ([assetType isEqualToString: ALAssetTypePhoto]){
NSLog(@"This is a photo asset");
foundThePhoto = YES;
*stop = YES;
/* Получаем объект представления ресурса. */
ALAssetRepresentation *assetRepresentation =
[result defaultRepresentation];
/* Нам требуются данные о масштабе и ориентации, чтобы можно
было создать правильно расположенное и вымеренное изображение
UIImage из нашего объекта представления. */
CGFloat imageScale = [assetRepresentation scale];
UIImageOrientation imageOrientation =
(UIImageOrientation)[assetRepresentation orientation];
dispatch_async(dispatch_get_main_queue(), ^(void) {
CGImageRef imageReference =
[assetRepresentation fullResolutionImage];
/* Сейчас создаем изображение. */
UIImage *image =
[[UIImage alloc] initWithCGImage: imageReference
scale: imageScale
orientation: imageOrientation];
if (image!= nil){
self.imageView = [[UIImageView alloc]
initWithFrame: self.view.bounds];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
self.imageView.image = image;
[self.view addSubview: self.imageView];
} else {
NSLog(@"Failed to create the image.");
}
});
}
}];
}
failureBlock: ^(NSError *error) {
NSLog(@"Failed to enumerate the asset groups.");
}];
});
}