У меня есть небольшое приложение для iPhone, которое загружает данные из веб-службы. Чтобы убедиться, что при загрузке данных ничего не происходит неправильно, я создаю полупрозрачное представление поверх приложения и использую CFRunloopRun (), чтобы дождаться загрузки всех данных в фоновом режиме. Вот код для этого:
self.connection = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
// Now show an animation
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
UIView *window = [[UIApplication sharedApplication] keyWindow];
UIView *shield = [[UIView alloc] initWithFrame:window.bounds];
shield.backgroundColor = [UIColor blackColor];
shield.alpha = 0.5f;
[window addSubview:shield];
spinner.center = shield.center;
[shield addSubview:spinner];
spinner.hidden = NO;
NSLog( @"JCL.callServerWithRequest(), spinner view: %@, shield view: %@, window: %@", spinner, shield, window );
[spinner startAnimating];
// Hand over to the Runnloop to wait
CFRunLoopRun();
[spinner stopAnimating];
[spinner removeFromSuperview];
[spinner release];
[shield removeFromSuperview];
[shield release];
Это прекрасно работает, за исключением того, что любые нажатия на кнопки где-то воспроизводятся после загрузки, поэтому, если пользователи дважды нажимают на кнопку загрузки, он также выполнит загрузку дважды.
Любая идея, как использовать события пользовательского интерфейса до снятия щита.
Спасибо - Энди