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

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

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

β€” (BOOL) isPhotoLibraryAvailable{


return [UIImagePickerController isSourceTypeAvailable:

UIImagePickerControllerSourceTypePhotoLibrary];


}


β€” (BOOL) canUserPickVideosFromPhotoLibrary{


return [self

cameraSupportsMedia:(__bridge NSString *)kUTTypeMovie

sourceType: UIImagePickerControllerSourceTypePhotoLibrary];


}


β€” (BOOL) canUserPickPhotosFromPhotoLibrary{


return [self

cameraSupportsMedia:(__bridge NSString *)kUTTypeImage

sourceType: UIImagePickerControllerSourceTypePhotoLibrary];


}


β€” (void)viewDidAppear:(BOOL)animated{

[super viewDidAppear: animated];


static BOOL beenHereBefore = NO;


if (beenHereBefore){

/* ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ элСмСнт для Π²Ρ‹Π±ΠΎΡ€Π° Π΄Π°Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ вызываСтся

ΠΌΠ΅Ρ‚ΠΎΠ΄ viewDidAppear:, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄Π°

нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π° */

return;

} else {

beenHereBefore = YES;

}


if ([self isPhotoLibraryAvailable]){


UIImagePickerController *controller =

[[UIImagePickerController alloc] init];


controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

NSMutableArray *mediaTypes = [[NSMutableArray alloc] init];


if ([self canUserPickPhotosFromPhotoLibrary]){

[mediaTypes addObject:(__bridge NSString *)kUTTypeImage];

}


if ([self canUserPickVideosFromPhotoLibrary]){

[mediaTypes addObject:(__bridge NSString *)kUTTypeMovie];

}


controller.mediaTypes = mediaTypes;

controller.delegate = self;

[self.navigationController presentModalViewController: controller

animated: YES];

}

}


О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ cameraSupportsMedia: sourceType:, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 13.1.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ фотоснимки ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΈ ΠΈΠ· своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свойство sourceType экзСмпляра UIImagePickerController Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ UIImagePickerControllerSourceTypePhotoLibrary ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ инструмСнт для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΈ ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа элСмСнтов, прСдставлСнных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² инструмСнтС для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ kUTTypeMovie ΠΈΠ»ΠΈ kUTTypeImage соотвСтствСнно ΠΈΠ· списка Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ Π² инструмСнтС для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (это дСлаСтся Π² свойствС mediaTypes).

Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ, Ссли ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства mediaTypes ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² nil, получится пустой массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ спровоцируСт ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ сообщСния Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UIImagePickerControllerDelegate. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², опрСдСляСмых Π² этом ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 13.2.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 13.7.

13.7. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ рСсурсов ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов

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

ВрСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ нСпосрСдствСнно ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ, Π½Π΅ прибСгая ΠΊ использованию ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ встроСнных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² графичСского ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

РСшСниС

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ Assets Library (Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов). Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги.

1. Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° ALAssetsLibrary.

2. ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΄Π²Π° Π±Π»ΠΎΠΊΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ экзСмпляра enumerateGroupsWithTypes: usingBlock: failureBlock:, относящСмуся ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов». ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ всС Π³Ρ€ΡƒΠΏΠΏΡ‹, ассоциированныС с Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ сообщили этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. Π“Ρ€ΡƒΠΏΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΈΠΏΡƒ ALAssetsGroup. Π’ случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° ошибка.

3. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ экзСмпляра enumerateAssetsUsingBlock: ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для пСрСчислСния рСсурсов, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” Π±Π»ΠΎΠΊ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятому рСсурсу. Π‘Π»ΠΎΠΊ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΈΠΏΡƒ ALAsset.

4. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ALAsset, доступныС Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ свойства ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСсурса: Π΅Π³ΠΎ Ρ‚ΠΈΠΏ, доступныС URL ΠΈ Ρ‚. Π΄. Для получСния этих свойств ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра valueForProperty:, относящийся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ рСсурсу Ρ‚ΠΈΠΏΠ° ALAsset. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой NSDictionary, NSString ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ВскорС ΠΌΡ‹ рассмотрим ΠΎΠ±Ρ‰ΠΈΠ΅ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΎΡ‚ любого рСсурса.

5. Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра defaultRepresentation ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° ALAsset, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСдставлСния (Representation Object) Ρ‚ΠΈΠΏΠ° ALAssetRepresentation. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ рСсурс ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прСдставлСния. НапримСр, фотография ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PNG, Π½ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΈ прСдставлСниСм JPEG. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° defaultRepresentation ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСсурса Ρ‚ΠΈΠΏΠ° ALAsset ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ALAssetRepresentation, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для получСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прСдставлСний ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСсурса (ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… прСдставлСний).

6. ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ size ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ экзСмпляра getBytes: fromOffset: length: error: ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прСдставлСния рСсурса для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ прСдставлСнии рСсурса. Π—Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ NSData ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с фотографиями ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра fullResolutionImage, fullScreenImage ΠΈ CGImageWithOptions: ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прСдставлСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ изобраТСния Ρ‚ΠΈΠΏΠ° CGImageRef. ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ UIImage ΠΈΠ· CGImageRef с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса imageWithCGImage:, относящСгося ΠΊ классу UIImage:


β€” (void)viewDidAppear:(BOOL)animated{

[super viewDidAppear: animated];


static BOOL beenHereBefore = NO;


if (beenHereBefore){

/* ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ элСмСнт для Π²Ρ‹Π±ΠΎΡ€Π° Π΄Π°Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ вызываСтся

ΠΌΠ΅Ρ‚ΠΎΠ΄ viewDidAppear:, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄Π°

нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π° */

return;

} else {

beenHereBefore = YES;

}

self.assetsLibrary = [[ALAssetsLibrary alloc] init];


[self.assetsLibrary

enumerateGroupsWithTypes: ALAssetsGroupAll

usingBlock: ^(ALAssetsGroup *group, BOOL *stop) {

[group enumerateAssetsUsingBlock: ^(ALAsset *result,

NSUInteger index,

BOOL *stop) {


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚ΠΈΠΏ рСсурса. */

NSString *assetType = [result valueForProperty: ALAssetPropertyType];


if ([assetType isEqualToString: ALAssetTypePhoto]){

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

}


else if ([assetType isEqualToString: ALAssetTypeVideo]){

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

}


else if ([assetType isEqualToString: ALAssetTypeUnknown]){

NSLog(@"This is an unknown asset");

}


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС URL Π΄Π»Ρ рСсурса. */

NSDictionary *assetURLs =

[result valueForProperty: ALAssetPropertyURLs];


NSUInteger assetCounter = 0;

for (NSString *assetURLKey in assetURLs){

assetCounter++;

NSLog(@"Asset URL %lu = %@",

(unsigned long)assetCounter,

[assetURLs valueForKey: assetURLKey]);

}


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСдставлСния рСсурса. */

ALAssetRepresentation *assetRepresentation =

[result defaultRepresentation];


NSLog(@"Representation Size = %lld", [assetRepresentation size]);


}];

}

failureBlock: ^(NSError *error) {

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

}];


}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов подраздСляСтся Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ содСрТатся рСсурсы, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ рСсурс ΠΈΠΌΠ΅Π΅Ρ‚ свойства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ URL (ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ рСсурсов) ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ прСдставлСния.

ВсС рСсурсы всСх Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ константы ALAssetsGroupAll. Она пСрСдаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ enumerateGroupsWithTypes ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра enumerateGroupsWithTypes: usingBlock: failureBlock:, относящСгося ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов». Π’ΠΎΡ‚ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ для пСрСчислСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ рСсурсов:

β€’ ALAssetsGroupAlbum β€” Π³Ρ€ΡƒΠΏΠΏΡ‹, содСрТащиС Π°Π»ΡŒΠ±ΠΎΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сохранСны Π½Π° устройствС iOS ΠΈΠ· iTunes;

β€’ ALAssetsGroupFaces β€” Π³Ρ€ΡƒΠΏΠΏΡ‹, содСрТащиС Π°Π»ΡŒΠ±ΠΎΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСны Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π»ΠΈΡ†, сохранСнныС Π½Π° устройствС iOS ΠΈΠ· iTunes;

β€’ ALAssetsGroupSavedPhotos β€” Π³Ρ€ΡƒΠΏΠΏΡ‹, содСрТащиС снимки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сохранСны Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ. На устройствС iOS эти рСсурсы доступны Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Photos (Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ);

β€’ ALAssetsGroupAll β€” всС Π³Ρ€ΡƒΠΏΠΏΡ‹, доступныС Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ рСсурсов.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ рСсурсов, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ UIImageView с этим ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ это ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄ Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚. На Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ научимся ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ содСрТимоС рСсурса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ прСдставлСниС.