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

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

Жанры

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{

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

Черный Кровавый Триллиум

Нортон Андрэ
Шедевры фантастики
Фантастика:
фэнтези
4.75
рейтинг книги
Черный Кровавый Триллиум

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
6.20
рейтинг книги
Вечный. Книга III

Культура имеет значение

Хантингтон Самюэль
Научно-образовательная:
культурология
5.50
рейтинг книги
Культура имеет значение

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Память Света/Память огня (др. перевод)

Сандерсон Брендон
14. Колесо Времени
Фантастика:
фэнтези
7.50
рейтинг книги
Память Света/Память огня (др. перевод)

Брат за брата

Колычев Владимир Григорьевич
Детективы:
криминальные детективы
6.62
рейтинг книги
Брат за брата

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Линия огня

Орехов Василий
9. S.T.A.L.K.E.R.
Фантастика:
боевая фантастика
8.74
рейтинг книги
Линия огня

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

2012. Хроника апокалипсиса

Медведев Антон Николаевич
Фантастика:
боевая фантастика
6.75
рейтинг книги
2012. Хроника апокалипсиса

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Мы - истребители

Поселягин Владимир Геннадьевич
2. Я - истребитель
Фантастика:
альтернативная история
8.55
рейтинг книги
Мы - истребители

Волшебница-самозванка

Набокова Юлия
1. Волшебница-самозванка
Фантастика:
юмористическое фэнтези
8.27
рейтинг книги
Волшебница-самозванка

100 великих замков

Ионина Надежда Алексеевна
100 великих
Научно-образовательная:
история
прочая научная литература
5.00
рейтинг книги
100 великих замков