2013-06-19 2 views
0

Я создал функцию, которая будет циклически перемещаться по изображениям (1.png, 2.png, 3.png, 4.png, 5.png) и отображать их в UIImageView. Идея состоит в том, что я загружаю веб-страницу, и я хочу, чтобы это изображение просматривало эту функцию, в основном как значок загрузки. Однако я не понимаю, почему он не работает, насколько я вижу изображение, я ничего не вижу. Пожалуйста помоги! Код моей функции приведен ниже. Я знаю, что это что-то не так, я делаю здесь, потому что все остальное, что я тестирую, включая делегата webview, отлично работает.Почему мой ImageView ничего не делает, по крайней мере, перерисовывает?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    for(int c = 1; !webviewLoaded; c++) 
    { 
     c = c % 6; 
     if(c == 6) 
      c = 1; 
     NSString *numberString = [NSString stringWithFormat:@"%d.png", c]; 
     UIImage *img = [UIImage imageNamed:numberString]; 
     [self.loadingImage setImage:img]; 
     sleep(1); 
    } 
}); 
+0

Вы должны прочитать документацию по UIImageView. У него есть анимация, построенная прямо. –

ответ

0

Поскольку вы делаете материал UI на фоновом потоке, вы должны изменить компоненты пользовательского интерфейса из фоновой темы.

Вы можете изменить свой код следующим образом:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    for(int c = 1; !webviewLoaded; c++) 
    { 
     c = c % 6; 
     if(c == 6) 
      c = 1; 
     NSString *numberString = [NSString stringWithFormat:@"%d.png", c]; 
     UIImage *img = [UIImage imageNamed:numberString]; 
     [self.loadingImage setImage:img]; 
     sleep(1); 
    } 
    } 
}); 

Этот фрагмент кода будет работать, но это своего рода бесполезно, и это даст вам результаты, не так хорошо, как вы ожидали, потому что вы делаете создает отдельный поток (операцию) только для вызова потока пользовательского интерфейса из него, и это не эффективно.

Что вы должны сделать, это полностью удалить отправку, как это:

for(int c = 1; !webviewLoaded; c++) 
    { 
      c = c % 6; 
      if(c == 6) 
       c = 1; 
      NSString *numberString = [NSString stringWithFormat:@"%d.png", c]; 
      UIImage *img = [UIImage imageNamed:numberString]; 
      [self.loadingImage setImage:img]; 
      sleep(1); 
    } 

Это также будет работать, но убедитесь, что у вас есть эти файлы @"%d.png добавлены в проект.

И потому, что вы не знакомы с GCD вот good tutorial

+0

@MarcusAdams Да, он мог, но он разместил кусок кода, и я не знаю, как он его использует, поэтому я опубликовал решение этого кода, но из того, что, по моему мнению, он пытается (просто загружать некоторые изображения из проекта) нет необходимости в какой-либо «диспетчеризации», потому что на изображении или других компьютерах нет тяжелой обработки, поэтому я добавил вторую часть кода;) – danypata

+0

Благодарим за помощь и ваш ресурс. FYI, ваше предложение было лишь частичным решением. Чтобы заставить его работать, вам нужно поставить второй блок только на пользовательский интерфейс, который меняется, я по-прежнему благодарен за то, что вы нашли время – srz2

+0

Рад, что я мог бы помочь;) – danypata

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