2015-01-13 5 views
0

мой код выглядит следующим образом:UI не обновляется мгновенно IOS

var images = [UIImage]() 
var isFirstLoop = true 
for (imageID in self.imageID’s) 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT Y_DEFAULT, 0), { 
     let imageToAdd = self.getImageFromUrlByID(imageID) 
     if isFirstLoop 
     { 
      self.addSubView(imageToAdd) 
      isFirstLoop = false 
     } 
    } 
} 

Я просто не могу понять, почему первое изображение добавляется как подвид только тогда, когда все задачи закончены .... Я попытался обернуть addSubView любой возможной комбинацией dispatch_async с основным потоком и так далее ... требуется возраст, пока изображение не будет добавлено как subView .. пожалуйста, помогите мне :) Спасибо заранее! :)

+0

Не могли бы вы попытаться запустить вызов addSubview() в основной теме? – Undo

+0

Попробуйте это dispatch_async (dispatch_get_main_queue(),^{ // Ваш код здесь }); – Nitesh

+0

во всех случаях, UIImageView добавлен в пользовательский интерфейс, я знаю это, потому что, если бы я сделал это с помощью tapGestureRecognizer, который печатает добавленные, но само изображение не появится, пока все не закончится, оно просто там, как прозрачный UIImageView .. что должно Я делаю?? –

ответ

3

ВСЕГДА Обновление пользовательского интерфейса из основной нити.

+0

во всех случаях, UIImageView добавлен в пользовательский интерфейс, я знаю это, потому что, если бы я сделал это с помощью tapGestureRecognizer, который печатает добавленные, но сам образ не появляется, пока все не закончится, оно просто там, как прозрачный UIImageView .. что должно Я делаю?? –

+0

Где вы печатаете "Добавить"? Если это журнал, это не обязательно означает, что вы добавили его в основной поток. – AdamPro13

1

Включите только dispatch_get_main_queue, где вы действительно обновите интерфейс. Если ваш метод getImageFromURLByID() обращается к Интернету, который, как я предполагаю, вам не нужен, вы ничего не хотите с подключением к потоку пользовательского интерфейса, потому что он часто задерживает его.

for imageID in imageIDs 
{ 
    let imageToAdd = self.getImageFromUrlByID(imageID) 

    if isFirstLoop { 
     dispatch_async(dispatch_get_main_queue() { 
      var imageView = UIImageView(image: imageToAdd) 
      imageView.frame = someFrame 
      self.addSubView(imageView) 
     } 
     isFirstLoop = false 
    } 
} 
+0

во всех случаях, UIImageView добавлен в пользовательский интерфейс, я знаю это, потому что, если бы я сделал это с помощью tapGestureRecognizer, который печатает добавленные, но сам образ не появится, пока все не закончится, оно просто там, как прозрачный UIImageView .. что должно Я делаю?? –

+0

Вы не можете просто добавить UIImage в качестве подзаголовка. Он должен быть размещен в UIImageView. Обновленный код создает много UIImageViews, но вы также можете просто создать его как переменную класса и установить его образ, используя 'self.imageView.image = imageToAdd' – Ian

+0

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