Dispatch_async и пользовательский интерфейс - PullRequest
1 голос
/ 25 августа 2011

Я сделал оповещение, информируя пользователя о сохранении действия, добавляю его для просмотра, сохраняю некоторое изображение и отключаю оповещение.Однако это не работает так, как я надеялся.Глядя на код ниже ofc сначала в консоли я получаю "сохранено ..", а затем "Диспат".Я хотел бы получить противоположный эффект, сначала получить «dispath», а затем «сохранить ...» (поэтому напишите предупреждение на экране, затем сохраните в фоновом режиме и, наконец, отключите предупреждение).Но я меняю изображение imageView1, поэтому я не могу переместить слияние из dispath_async, потому что это действие пользовательского интерфейса .. как это сделать потом?Мне нужно сначала объединить изображения, а затем сохранить их и все это время расчета, чтобы быть начеку.

//adding alert to view
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
^{
    dispatch_async(dispatch_get_main_queue(), ^{
        //i want this to complete->
        imageView1.image = [self merge:imageView1.image and:imageView2.image];
        NSLog(@"dispatch");
    });

    //and then to do this action->
    UIImageWriteToSavedPhotosAlbum(imageView1.image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
    NSLog(@"saved..");

    dispatch_async(dispatch_get_main_queue(), ^{
        [alert dismissWithClickedButtonIndex:0 animated:YES];
    });
});

1 Ответ

6 голосов
/ 25 августа 2011

Вы должны просто использовать dispatch_sync вместо dispatch_async. Эта функция не вернется, пока блок не выполнится в главном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...