executeSelectorOnMainThread не ожидает завершения - PullRequest
1 голос
/ 24 мая 2011

У меня есть поток, который выполняет некоторые задачи.

В конце я хочу запустить селектор, чтобы скрыть изображение с анимацией.

[self performSelectorOnMainThread:@selector(finishUpdate) withObject:nil waitUntilDone:YES];

Я устанавливаю продолжительность на 10 секунд:

- (void) finishUpdate {

    UIImageView *myImage = (UIImageView *)[self.view viewWithTag:788];

    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:10.0f];
    myImage.frame = CGRectMake(0, 200, 320, 80);
    myImage.alpha = 0.0f;
    [UIView commitAnimations];
}

Но он исчезает мгновенно, и поток сразу же продолжается.

Знаете ли вы, как заставить мою ветку ждать или как отобразить эту простую анимацию?

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Вместо того, чтобы ждать окончания селектора, я использовал метод sleepForTimeInterval:, чтобы приостановить поток, используя ту же продолжительность, что и моя анимация.

[NSThread sleepForTimeInterval:0.3];
2 голосов
/ 24 мая 2011

Это нормальное поведение для метода немедленно вернуться.[UIView commitAnimations] не ожидает завершения анимации (или любого другого метода, который вы используете).

Кристофер Джонсон прав, что вы не должны использовать UIGraphicsGetCurrentContext в этом контексте.Он используется в drawRect: или при наличии допустимого графического контекста.

Контекст анимации не относится к графическому контексту.Просто передайте NULL, если вам не нужен контекст в каком-либо делегате анимации.

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