Индикатор активности остановки анимации не имеет никакого эффекта

Так что в основном у меня есть индикатор активности, который я запускаю, как это перед отправкой асинхронного запроса

[self.activityIndicator setBounds:self.view.frame];
[self.activityIndicator setCenter:self.view.center];
[self.activityIndicator setAlpha:1.0f];
UIColor *activityBackgroundColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.3];
[self.activityIndicator setBackgroundColor:activityBackgroundColor];
[self.activityIndicator startAnimating];

[self sentRequestToFacebook];
[calender returnCalenderEvents];

Обработчики завершения для асинхронного запроса уведомляют объект основного объекта, используя NSNotification чтобы остановить индикатор активности, который я делаю так

if ([[notification name]isEqualToString:@"calenderData"]) {
    calenderDataReceived = YES;
    NSDictionary* userInfo = notification.userInfo;
    calendarData = [userInfo objectForKey:@"data"];
}
else if ([[notification name]isEqualToString:@"facebookData"])
{
    facebookDataReceived = YES;
    NSDictionary* userInfo = notification.userInfo;
    facebookData = [userInfo objectForKey:@"data"];
}

if (facebookDataReceived&&calenderDataReceived) {
    facebookDataReceived = NO;
    calenderDataReceived = NO;
    //Now do the mergings
    self.activityIndicator.hidden = YES;
    [self.activityIndicator stopAnimating];
    [self.activityIndicator removeFromSuperview];
    NSLog(@"%@",calendarData);
    NSLog(@"%@",facebookData);
}

Однако этот код не дал желаемого эффекта, и индикатор активности все еще будет анимироваться в течение нескольких секунд после запуска этого кода до его остановки.

В чем здесь проблема

1 ответ

Решение

Если индикатор останавливается через несколько секунд, убедитесь, что код, который останавливает индикатор, работает в главном потоке. если он работает в другом потоке, используйте этот фрагмент:

dispatch_async(dispatch_get_main_queue(), ^{
    self.activityIndicator.hidden = YES;
    [self.activityIndicator stopAnimating];
    [self.activityIndicator removeFromSuperview];
})
Другие вопросы по тегам