2012-05-16 2 views
1

У меня есть приложение, которое я строю, оно отлично работает, но источник изображения, который я использую, - это веб-сайт, и когда я возвращаюсь к своему первоначальному виду, для его загрузки требуется довольно много времени. Мой вопрос в том, будет ли способ сделать это, и скорость будет быстрее. здесь код я использую, чтобы тянуть мой источник изображенияEasy Asynchronous Image Download UIImage View

////Loads UIImageView from URL 
todaysWallpaper.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.inkdryercreative.com/daily/archive/mondays/images/062-mondays-960x640-A.jpg"]]]; 

помощь или толчок в правильном направлении. Скоро изображение будет меняться каждый день, так что любая помощь/мысли по этому поводу будут очень благодарны.

ответ

2

Проблема в том, что dataWithContentsOfURL: находится в основном потоке, поэтому он будет блокировать ваш пользовательский интерфейс при загрузке изображения.

Вы должны загрузить его асинхронно. Для этого я лично использую отличный кусок кода, который я нашел в Интернете: SDWebImage. Он делает именно то, что вы хотите.

+0

какая часть кода вы используете, чтобы найти лучшее – Gabriel

+1

Добавьте все файлы в свой проект. Затем импортируйте категорию «UIImageView + WebCache.h». После этого вы можете сделать [myImageView setImageWithURL: myURL]; – Zoleas

+0

Здравствуйте, только последовали за советом, но это не сработало. Он строит и работает нормально, но изображение не появляется. Я что-то упускаю? – ratsimihah

1

завернуть создание UIImage в блоке работает асинхронно (код предполагает, ARC), который в свою очередь вызывает ваш обратный вызов в главном потоке

@implementation Foo 
... 
Foo* __weak weakSelf=self; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL: 
        [NSURL URLWithString:@"http://www.inkdryercreative.com/..jpg"]]]; 
    dispatch_sync(dispatch_get_main_queue(),^ { 
     //run in main thread 
     [weakSelf handleDelayedImage:image]; 
    }); 
}); 

-(void)handleDelayedImage:(UIImage*)image 
{ 
    todaysWallpaper.image=image; 
} 

weakSelf трюк гарантирует, что ваш класс Foo надлежащую очистку, даже если Запрос URL-адреса все еще запущен

+0

отлично, именно то, что я искал, спасибо –