controller.mediaTypes = [[NSArray alloc]
initWithObjects: requiredMediaType, nil];
controller.allowsEditing = YES;
controller.delegate = self;
[self.navigationController presentModalViewController: controller
animated: YES];
} else {
NSLog(@"Camera is not available.");
}
}
ΠΠ΅ΡΠΎΠ΄Ρ isCameraAvailable ΠΈ doesCameraSupportTakingPhotos, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 13.1.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ½ΠΈΠΌΠ΅Ρ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Ρ iOS, ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎΡ ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡΡ Π² Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ iOS, ΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΠΎΡΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° UIImagePickerController, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠΉΠΌΠ΅Ρ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ ΡΠ½ΠΈΠΌΠΎΠΊ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡ Π²Π½ΡΡΡΠΈΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠΉΠΌΠ΅Ρ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ ΠΈΠΌ ΡΠ½ΠΈΠΌΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ, Π°, Π½Π°ΠΏΡΠΎΡΠΈΠ², Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΏΠΎ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ UIImage Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ UIImageWriteToSavedPhotosAlbum. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΡΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β’ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅;
β’ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΎ;
β’ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ (ΡΡΠΎΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΠ΅Π»Π΅Π²ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ). ΠΠ°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠ΄Π΅Ρ Π²ΡΠΎΡΡΠΌ, Π° ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ;
β’ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.
ΠΡΠΎΡΠΎΠΉ, ΡΡΠ΅ΡΠΈΠΉ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ Π·Π°Π΄Π°Π΄ΠΈΡΠ΅ ΠΈ Π²ΡΠΎΡΠΎΠΉ, ΠΈ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ. ΠΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π»Π΅ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²ΡΠ±ΡΠ°Π» Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
β (void) imageWasSavedSuccessfully:(UIImage *)paramImage
didFinishSavingWithError:(NSError *)paramError
contextInfo:(void *)paramContextInfo{
if (paramError == nil){
NSLog(@"Image was saved successfully.");
} else {
NSLog(@"An error happened while saving the image.");
NSLog(@"Error = %@", paramError);
}
}
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ UIImageWriteToSavedPhotosAlbum Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΠΎΡΠ½ΠΈΠΌΠΊΠ° Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅, ΡΠΎ iOS Π·Π°ΠΏΡΠΎΡΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΊΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ (ΡΠΈΡ. 13.1). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ Π½Π° ΡΡΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ, ΡΠ΅Π³ΠΎ Π½Π°ΠΌ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠΈΠ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π°Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° UIImageWriteToSavedPhotosAlbum ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ, ΡΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ, Π½ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ didFinishSavingWithError ΡΡΠΎΠ³ΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π ΠΈΡ. 13.1. iOS Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠ°Π²Π΅ Π΄ΠΎΡΡΡΠΏΠ°, Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ UIImageWriteToSavedPhotosAlbum Π±ΡΠ΄ΡΡ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΡΠΌΠΈ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡΡΠ½ΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° (ΡΠΈΡ. 13.2).
Π ΠΈΡ. 13.2. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ
ΠΡΠ»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ΅ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ error, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π²Π½ΠΎ nil, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΎ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΡΠΎΠ±Ρ Π²ΡΡΡΠ½ΠΈΡΡ, Π² ΡΠ΅ΠΌ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°.
13.5. Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΠΏΠΎ URL, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ»ΠΈΠΊ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° writeVideoAtPathToSavedPhotosAlbum: completionBlock:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΌΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ ALAssetsLibrary:
#import Β«AppDelegate.hΒ»
#import <AssetsLibrary/AssetsLibrary.h>
@interface AppDelegate ()
@property (nonatomic, strong) ALAssetsLibrary *assetsLibrary;
@end
@implementation AppDelegate
β (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.assetsLibrary = [[ALAssetsLibrary alloc] init];
NSURL *videoURL = [[NSBundle mainBundle] URLForResource:@"MyVideo"
withExtension:@"MOV"];
if (videoURL!= nil){
[self.assetsLibrary
writeVideoAtPathToSavedPhotosAlbum: videoURL
completionBlock: ^(NSURL *assetURL, NSError *error) {
if (error == nil){
NSLog(@"no errors happened");
} else {
NSLog(@"Error happened while saving the video.");
NSLog(@"The error is = %@", error);
}
}];
} else {
NSLog(@"Could not find the video in the app bundle.");
}
return YES;
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Assets Library β ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. ΠΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 13.6, Π² iOS SDK Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΎΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² (Assets Library).
ΠΡΠ΄Π΅Π»ΠΈΠ² ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π² ΠΎΠ±ΡΠ΅ΠΊΡ Assets Library ΡΠΈΠΏΠ° ALAssetsLibrary, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° writeVideoAtPathToSavedPhotosAlbum: completionBlock:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΌΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΈΠ΄Π΅ΠΎ Ρ URL Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. ΠΡΠ΅, ΡΡΠΎ ΠΎΡ Π²Π°Ρ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ URL Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠ° Π² ΡΠΎΡΠΌΠ΅ NSURL, Π° ΡΠ°ΠΊΠΆΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ΅ΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ. ΠΡΠΎΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠΎΠ² NSURL ΠΈ NSError.
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ error ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ nil, ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π» Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΏΠΎΠ²ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²Π° Π½Π΅Ρ. ΠΠ΄Π½Π° ΠΈΠ· ΡΠΈΠΏΠΈΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΡ iOS ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²Π΅ΡΠ½ΡΡΡ Π² ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ²Π°:
Error Domain=ALAssetsLibraryErrorDomain Code=-3302 Β«Invalid dataΒ»
UserInfo=0x79 23590 {NSLocalizedFailureReason=
There was a problem writing this asset because
the data is invalid and cannot be viewed or played.,
NSLocalizedRecoverySuggestion=Try with different data,
NSLocalizedDescription=Invalid data}
Π’Π°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ URL (ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠ°), Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΠΏΠ°ΠΊΠ΅ΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ writeVideoAtPathToSavedPhotosAlbum: completionBlock:, Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ URL Π²ΠΈΠ΄Π΅ΠΎ, ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ². URL ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
assets-library://asset/asset.MOV?id=F9B5F733-487C-
4418-8C8D-46ABC9FEE23B&ext=MOV
ΠΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅, ΡΠΎ iOS ΡΠΏΡΠΎΡΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° ΡΠ°ΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° writeVideoAtPathToSavedPhotosAlbum: completionBlock: Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²Π°Π»ΠΈΠ΄Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ»ΠΈ ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠΈΠ» Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ, ΡΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ. ΠΠΈΡΡ ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π²Π°ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ, ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π°Ρ Settings (ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ) ΠΈ Privacy (ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ).
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 13.7 Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ URL ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π²ΠΈΠ΄Π΅ΠΎΡΠ°ΠΉΠ»Π°.
13.6. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠΎΡΠΎ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· ΡΠ²ΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ UIImagePickerController ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ UIImagePickerControllerSourceTypePhotoLibrary Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΏΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ kUTTypeImage ΠΈΠ»ΠΈ kUTTypeMovie Π΄Π»Ρ ΡΠΈΠΏΠ° ΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ: