2012-03-06 2 views
2

У меня есть UIImageView внутри UIScrollView. UIImageView отображает изображение, которое постоянно загружается из Интернета (поток открывается с помощью NSURLConnection).Обновление UIImageView внутри UIScrollView - изображение зависает на свитке

NSString surl = @"some valid url"; 
NSURL* nsurl = [NSURL URLWithString:surl]; 
NSURLRequest *request = [NSURLRequest requestWithURL:nsurl]; 
[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

// this method will be called when every chunk of data is received 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    // here I collect data and when i have enough 
    // data to create UIImage i create one 
} 

Каждый раз, когда я получаю данные я упаковать его в NSData и когда я получаю весь образ я создаю UIImage из этого NSData, а затем я установить это изображение как изображение UIImageView. Все работает отлично, обновления изображений по мере необходимости, но когда я касаюсь экрана и начинаю перемещать содержимое (этот UIImageView всегда больше экрана, а UIScrollView всегда подходит для всего экрана), обновления изображений останавливаются, и я вижу только последний кадр, который отображался на время, когда я нажал. Это, похоже, происходит потому, что мой

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

прекращается вызов. После того, как вы отпустите мой палец с экрана, снова получите данные и обновления изображений, как и следовало ожидать. Я понятия не имею, почему мой метод делегирования NSURLConnection прекращает прием данных. Любая помощь?

ответ

4

Документация -[NSURLConnection initWithRequest:didReceiveData:] говорит следующее:

По умолчанию для подключения к правильной работе цикл выполнения вызывающего потока должен работать в режиме по умолчанию цикла выполнения.

Я предполагаю, что вы создаете NSURLConnection на основной теме.

Когда UIScrollView отслеживает прикосновение, он запускает цикл запуска в другом режиме, а не в режиме по умолчанию. Вот почему вы перестаете получать обновления, пока вы касаетесь прокрутки. (Это также вызывает NSTimer с, чтобы остановить стрельбу, пока вы прикасаясь вид прокрутки.)

Я думаю, что вы можете настроить свой NSURLConnection работать в обоих режимах по умолчанию и режим просмотра прокрутки слежения, как это:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request 
    delegate:self startImmediately:NO]; 
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode: NSRunLoopCommonModes]; 
[connection start]; 
0

Похоже, ваше взаимодействие с пользователем блокирует обновление данных, поскольку они оба работают в основном потоке. Я, случается, недавно отреагировал на very similar question пару.

 Смежные вопросы

  • Нет связанных вопросов^_^