Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 117

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ рСсурсов, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ 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{

[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];

}


/* Π­Ρ‚ΠΎΡ‚ дСскриптор Ρ„Π°ΠΉΠ»Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для записи

ΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… рСсурсов Π½Π° Π΄ΠΈΡΠΊ. */

NSFileHandle *fileHandle = [NSFileHandle

fileHandleForWritingAtPath: videoPath];

do{

/* Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚ΠΎΠ², сколько ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π±ΡƒΡ„Π΅Ρ€. */

bytesRead = [assetRepresentation getBytes:(uint8_t *)&buffer

fromOffset: currentOffset

length: BufferSize

error:&readingError];


/* Π•сли Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. */

if (bytesRead == 0){

break;

}


/* Π”Π°Π½Π½Ρ‹Π΅ ΠΎ смСщСнии Π±ΡƒΡ„Π΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. */

currentOffset += bytesRead;


/* ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π±ΡƒΡ„Π΅Ρ€ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ NSData. */

NSData *readData = [[NSData alloc]

initWithBytes:(const void *)buffer

length: bytesRead];


/* Π˜ записываСм Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ». */

[fileHandle writeData: readData];


} while (bytesRead > 0);

NSLog(@"Finished reading and storing the \

video in the documents folder");

}

}];

if (foundTheVideo){

*stop = YES;

}

}

failureBlock: ^(NSError *error) {

NSLog(@"Failed to enumerate the asset groups.");

}];

});

}


Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ происходит Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

1. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ стандартноС прСдставлСниС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ видСорСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ рСсурсов.

2. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Temp.MOV Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Documents нашСго прилоТСния для сохранСния содСрТимого видСорСсурса.

3. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ», Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² прСдставлСнии рСсурса Π΅Ρ‰Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. ΠœΠ΅Ρ‚ΠΎΠ΄ экзСмпляра getBytes: fromOffset: length: error:, относящийся ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ прСдставлСния рСсурса, считываСт ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚ΠΎΠ², сколько ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² Π±ΡƒΡ„Π΅Ρ€, ΠΈ ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Π΅Ρ‚ это ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ достигнСм ΠΊΠΎΠ½Ρ†Π° Π΄Π°Π½Π½Ρ‹Ρ… прСдставлСния.

4. ΠŸΠΎΡΠ»Π΅ считывания Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±ΡƒΡ„Π΅Ρ€ ΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΡ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° NSData, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ initWithBytes: length: класса NSData. Π—Π°Ρ‚Π΅ΠΌ записываСм эти Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ», созданный Ρ€Π°Π½Π΅Π΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра writeData:, относящСгося ΠΊ классу NSFileHandle.

13.8. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° устройствС с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой iOS

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВрСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄Π΅ΠΎ, ΠΌΠΎΠ³ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π² этом ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

РСшСниС

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ классом UIVideoEditorController. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ класс вмСстС с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ снимок ΠΈΠ· Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹Π±ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ экзСмпляр ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ.