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

ЖАНРЫ

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

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

Шрифт:

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{

[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) {

__block BOOL foundTheVideo = NO;

[group enumerateAssetsUsingBlock: ^(ALAsset *result,

NSUInteger index,

BOOL *stop) {

/* Получаем тип ресурса. */

NSString *assetType = [result

valueForProperty: ALAssetPropertyType];

if ([assetType isEqualToString: ALAssetTypeVideo]){

NSLog(@"This is a video asset");

foundTheVideo = YES;

*stop = YES;

/* Получаем объект представления ресурса. */

ALAssetRepresentation *assetRepresentation =

[result defaultRepresentation];

const NSUInteger BufferSize = 1024;

uint8_t buffer[BufferSize];

NSUInteger bytesRead = 0;

long long currentOffset = 0;

NSError *readingError = nil;

/* Создаем путь, по которому должно быть сохранено видео. */

NSString *videoPath = [documentsFolder

stringByAppendingPathComponent:@"Temp.MOV"];

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

/* Создаем файл, если он еще не существует. */

if ([fileManager fileExistsAtPath: videoPath] == NO){

[fileManager createFileAtPath: videoPath

contents: nil

attributes: nil];

}

/* Этот дескриптор файла мы будем использовать для записи

Поделиться с друзьями: