Из документации ясно, что анимации (запускаемые с помощью [UIView commitAnimations]) выполняются в отдельном потоке.Что не ясно (для меня, во всяком случае), так это то, выполняется ли animationDidStopSelector в основном потоке (UI) или в том же потоке, что и анимация.
Учитывая следующий код:
- (void) doSomethingCool {
// Fade out someView
[UIView beginAnimations:@"myAnimation" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDone:finished:context:)];
someView.alpha = 0.0;
[UIView commitAnimations];
}
- (void) animationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
if( [animationID isEqual:@"myAnimation"] ) {
[someView removeFromSuperview];
}
}
Я слышал, что доступ к элементам пользовательского интерфейса в потоке, отличном от основного потока, "вообще плох", поэтому, если вызов animationDone происходит надругой поток, тогда приведенный выше код будет делать плохие вещи, да?
Кажется, не делать плохих вещей.Но я преследовал случайный случайный сбой, который происходит после этой анимации, и мне интересно, есть ли какая-то проблема с многопоточностью.