Индикатор активности остановки анимации не имеет никакого эффекта
Так что в основном у меня есть индикатор активности, который я запускаю, как это перед отправкой асинхронного запроса
[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];
})