Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

Теперь напишем простое приложение, которое будет получать данные о первом изображении, найденном в библиотеке ресурсов, создавать 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.");

}];

});

}

Мы перечисляем группы и каждый ресурс в группе. Потом находим первый ресурс-фотографию и получаем его представление. С помощью этого представления создаем UIImage, а уже из UIImage делаем UIImageView для демонстрации изображения в виде. Ничего сложного, правда?

Работа с видеофайлами строится немного иначе, поскольку в классе ALAssetRepresentation нет каких-либо методов, способных возвращать объект, заключающий в себе видеофайл. Поэтому нам потребуется считать содержимое видеоресурса в буфер и, возможно, сохранить его в каталоге Documents, где впоследствии к этому документу будет проще получить доступ. Разумеется, конкретные требования зависят от определенного приложения, но в приведенном далее примере кода мы пойдем дальше — найдем первый видеофайл в библиотеке ресурсов и сохраним его в каталоге Documents в приложении под названием Temp.MOV:

— (NSString *) documentFolderPath{

NSFileManager *fileManager = [[NSFileManager alloc] init];

NSURL *url = [fileManager URLForDirectory: NSDocumentDirectory

inDomain: NSUserDomainMask

appropriateForURL: nil

create: NO

error: nil]

return url.path;

}

— (void)viewDidAppear:(BOOL)animated{

Поделиться:
Популярные книги

Черный Маг Императора 23

Герда Александр
23. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 23

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Глубокий космос

Вайс Александр
9. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Глубокий космос

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Газлайтер. Том 28

Володин Григорий Григорьевич
28. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 28

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Кодекс Охотника. Книга ХХХ

Винокуров Юрий
30. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга ХХХ

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5