Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ 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. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ ΠΈΠ· Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²ΡΠ±ΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΠΈΠ΄Π΅ΠΎΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, Π³Π΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ.