6. Пользуйтесь методами size и методами экземпляра getBytes: fromOffset: length: error: каждого представления ресурса для загрузки данных о представлении ресурса. Затем можно записать прочитанные байты в объект NSData или выполнить любую другую операцию, необходимую в ходе работы приложения. Кроме того, при работе с фотографиями можно использовать методы экземпляра fullResolutionImage, fullScreenImage и CGImageWithOptions: каждого представления, чтобы получать изображения типа CGImageRef. Потом можно создать UIImage из CGImageRef с помощью метода класса imageWithCGImage:, относящегося к классу UIImage:
— (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear: animated];
static BOOL beenHereBefore = NO;
if (beenHereBefore){
/* Отображаем элемент для выбора даты только после того, как вызывается
метод viewDidAppear:, что происходит при каждом отображении вида
нашего контроллера вида */
return;
} else {
beenHereBefore = YES;
}
self.assetsLibrary = [[ALAssetsLibrary alloc] init];
[self.assetsLibrary
enumerateGroupsWithTypes: ALAssetsGroupAll
usingBlock: ^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsUsingBlock: ^(ALAsset *result,
NSUInteger index,
BOOL *stop) {
/* Получаем тип ресурса. */
NSString *assetType = [result valueForProperty: ALAssetPropertyType];
if ([assetType isEqualToString: ALAssetTypePhoto]){
NSLog(@"This is a photo asset");
}
else if ([assetType isEqualToString: ALAssetTypeVideo]){
NSLog(@"This is a video asset");
}
else if ([assetType isEqualToString: ALAssetTypeUnknown]){
NSLog(@"This is an unknown asset");
}
/* Получаем все URL для ресурса. */
NSDictionary *assetURLs =
[result valueForProperty: ALAssetPropertyURLs];
NSUInteger assetCounter = 0;
for (NSString *assetURLKey in assetURLs){
assetCounter++;
NSLog(@"Asset URL %lu = %@",
(unsigned long)assetCounter,
[assetURLs valueForKey: assetURLKey]);
}
/* Получаем объект представления ресурса. */
ALAssetRepresentation *assetRepresentation =
[result defaultRepresentation];
NSLog(@"Representation Size = %lld", [assetRepresentation size]);
}];
}
failureBlock: ^(NSError *error) {
NSLog(@"Failed to enumerate the asset groups.");
}];
}
Библиотека ресурсов подразделяется на группы. В каждой группе содержатся ресурсы, а каждый ресурс имеет свойства, например URL (универсальные локаторы ресурсов) и объекты представления.
Все ресурсы всех типов можно получать из библиотеки ресурсов с помощью константы ALAssetsGroupAll. Она передается параметру enumerateGroupsWithTypes метода экземпляра enumerateGroupsWithTypes: usingBlock: failureBlock:, относящегося к объекту «Библиотека ресурсов». Вот список значений, которые можно передать этому параметру для перечисления различных групп ресурсов:
• ALAssetsGroupAlbum — группы, содержащие альбомы, которые были сохранены на устройстве iOS из iTunes;
• ALAssetsGroupFaces — группы, содержащие альбомы, в которых представлены фотографии лиц, сохраненные на устройстве iOS из iTunes;
• 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){
Читать дальше
Конец ознакомительного отрывка
Купить книгу