Как сохранить URL изображения в библиотеке фотографий и впоследствии использовать сохраненное изображение - PullRequest
4 голосов
/ 17 октября 2011

Я реализую функцию «поиска картинок в Интернете» для своего приложения.Мне нужен следующий поток:

1) Извлечение URL-адреса изображения, которое пользователь хочет использовать

2) Сохранение изображения (через URL) в фотоальбом телефона

3) Получите сохраненное изображение через контроллер средства выбора изображений и откройте экран перемещения и масштабирования

4) Используйте изображение, извлеченное из альбома.

Может кто-нибудь посоветовать, как мнеМожно ли выполнить описанные выше действия после получения URL-адреса изображения?

1 Ответ

12 голосов
/ 17 октября 2011

Вы можете сохранить изображение в фотоальбоме с этим кодом

    UIImageWriteToSavedPhotosAlbum(yourImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);



- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if (error != NULL)
    {
        // handle error
    }
    else 
    {
        // handle ok status
    }
}

Теперь для выполнения кода в другом потоке я бы написал такой код

// load data in new thread
[NSThread detachNewThreadSelector:@selector(downloadImage) toTarget:self withObject:nil];

Этот метод вы можете использовать где угоднов вашем коде, кнопке или любом другом элементе управления UIKit.Тогда вам понадобятся методы, которые будут выполнять тяжелую работу.

- (void)downloadImage
{

    // network animation on
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    // create autorelease pool
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

   // save image from the web
    UIImageWriteToSavedPhotosAlbum([UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"your_image_address.com"]]], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

    [self performSelectorOnMainThread:@selector(imageDownloaded) withObject:nil waitUntilDone:NO ];  

    [pool drain];       

}

- (void)imageDownloaded
{

    // network animation off
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    // do whatever you need to do after 
}
...