Все выполнено. Ваша проблема в том, что вызов saveImageToDisk
является синхронным, и вы вызываете его из потока пользовательского интерфейса. Когда вы блокируете поток пользовательского интерфейса, ничего не перерисовывается. Индикатор отображается, но его нельзя отобразить на экране, пока не вернется IBAction
, когда он снова будет скрыт.
Вы должны вызывать метод сохранения асинхронно.
Блокировка потока пользовательского интерфейса никогда не бывает хорошей идеей.
Изменить: см. Ответ на следующий вопрос для правильного решения: асинхронные вызовы базы данных в IOS
Edit2: одно из возможных решений (не проверено)
-(IBAction)saveDownloadedImage {
indicatorView.hidden = NO; //Note you can use hidesWhenStopped property for this
[indicatorView startAnimating];
[statusLabel setText:@"BECAUSE..."];
[currentPicture setImage:[imageView image]];
[NSThread detachNewThreadSelector:@selector(save) toTarget:self withObject:nil]
}
- (void)save {
@autoreleasepool {
ImageFileManager *fileManager = [[ImageFileManager alloc] init];
[fileManager saveImageToDisk:currentPicture];
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
}
}
- (void)updateUI {
indicatorView.hidden = YES;
[statusLabel setText:@"Image saved successfully."];
saveButton.enabled = NO;
}