2013-01-23 4 views
12

dla aplikacji Zajmuję używam UIImagePickerController nakręcić obraz i zapisać go w rolki aparatu:zapisać obraz w rolki aparatu i uzyskać adres URL zasobu

- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info { 
//... some stuff ... 

     UIImageWriteToSavedPhotosAlbum([info objectForKey:@"UIImagePickerControllerOriginalImage"], nil, nil, nil); 

} 

obraz zostanie zapisany, teraz muszę zdobądź jego adres URL, więc staram się wyliczyć rzut kamery i uzyskać ostatni obraz, ale zawsze dostaję obraz przed tym, który właśnie sfotografowałem.

Ktoś ma pomysł, jak uzyskać referencję do właśnie zapisanego zdjęcia?

Dzięki, Maks

Odpowiedz

12

Rozwiązanie to powinno rozwiązać problem:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library writeImageToSavedPhotosAlbum:((UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage]).CGImage 
           metadata:[info objectForKey:UIImagePickerControllerMediaMetadata] 
          completionBlock:^(NSURL *assetURL, NSError *error) { 
           NSLog(@"assetURL %@", assetURL); 
          }]; 

et voila:

assetURL assets-library://asset/asset.JPG?id=1611E84C-24E2-4177-B49A-1C57B4A9C665&ext=JPG 
+0

można zaproponować mi coś więcej o tym, jak zapisać zdjęcie na rolce z aparatu ? Mogę zapisać obraz, ale URL aktywów zwraca "null". – Sabarish

+0

Musisz zmienić blok zakończenia. I przykład powyżej bloku zakończenia po prostu rejestruje assetURL, powinno to być coś takiego: ALAssetsLibrary * al = [addPhoto defaultAssetsLibrary]; [al assetForURL: resultURL resultBlock: resultblock failureBlock: failureblock]; gdzie defaultAssetsLibrary jest: + (ALAssetsLibrary *) defaultAssetsLibrary { static dispatch_once_t pred = 0; static ALAssetsLibrary * library = nil; dispatch_once (& pred,^{ library = [[init ALAssetsLibrary]]; }); biblioteka powrotu; } – masgar