Ответ 1
Если вы хотите избежать недокументированного api, вы также можете взглянуть на MBProgressHUD. Он похож на UIProgressHUD и даже имеет некоторые дополнительные функции.
Как создать черно-серый модальный всплывающий вид, который используется многими приложениями, когда выполняется некоторая длинная ожидающая операция?
Как и при использовании служб на основе местоположения, загрузки веб-страницы, экран становится тусклым, и есть модальный вид, показывающий значок поворота "Подождите..."
Пример на следующем снимке экрана:
Если вы хотите избежать недокументированного api, вы также можете взглянуть на MBProgressHUD. Он похож на UIProgressHUD и даже имеет некоторые дополнительные функции.
Это фактически недокументированное (в любом случае, 2.2.1) UIProgressHUD. Создайте такой вот:
В вашем .h:
@interface UIProgressHUD : NSObject
- (UIProgressHUD *) initWithWindow: (UIView*)aWindow;
- (void) show: (BOOL)aShow;
- (void) setText: (NSString*)aText;
@end
В вашем .m:
- (void) killHUD: (id)aHUD
{
[aHUD show:NO];
[aHUD release];
}
- (void) presentSheet
{
id HUD = [[UIProgressHUD alloc] initWithWindow:[contentView superview]];
[HUD setText:@"Doing something slow. Please wait."];
[HUD show:YES];
[self performSelector:@selector(killHUD:) withObject:HUD afterDelay:5.0];
}
Я думаю, что самый простой (несколько строк кода), полностью документированный и самый красивый способ - это использовать UIAlertView с UIActivityIndicatorView:
http://iosdevelopertips.com/user-interface/uialertview-without-buttons-please-wait-dialog.html
(источник: iosdevelopertips.com)
Если вы добавите UIView в качестве подзона в главном окне, он будет охватывать весь пользовательский интерфейс. Сделайте его частично прозрачным и частично полупрозрачным, и он будет выглядеть как всплывающее окно.
В этом примере показано, как исчезать заставку Default.png, начиная с этого довольно просто добавить несколько методов в ваше приложение делегат (который имеет указатель на главное окно), чтобы представить и отклонить представление прогресса.
Взгляните на приложение Wordpress iPhone (http://iphone.wordpress.org/) для примера того, как это сделать без использования каких-либо недокументированных API.
Я использую LoadingHUDView для этой цели, и он работает всегда.
получить LoadingHUDView.m и LoadingHUDView.h и сделайте следующее в своем базовом классе (или что-то еще)
#pragma mark ActivityIndicator Methods
-(void) showModalActivityIndicator:(NSString *)message
{
loadingView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]retain];// origional
//loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; //testing
loadingView.backgroundColor = [UIColor grayColor]; //[UIColor colorWithRed:1 green:1 blue:1 alpha:0.3];
LoadingHUDView *loadHud = [[LoadingHUDView alloc] initWithTitle:message];
loadHud.center = CGPointMake(160, 290);
[loadingView addSubview:loadHud];
[loadHud startAnimating];
[loadHud release];
[loadingView setAlpha:0.0];
[self.tableView addSubview:loadingView];
[UIView beginAnimations:@"fadeOutSync" context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[loadingView setAlpha:0.5];
[UIView commitAnimations];
}
-(void) hideModalActivityIndicator {
if (loadingView) {
[UIView beginAnimations:@"fadeOutSync" context:NULL];
[UIView setAnimationDidStopSelector:@selector (removeTranparentView) ];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[loadingView setAlpha:0];
[UIView commitAnimations];
}
}
-(void)removeTranparentView
{
[loadingView removeFromSuperview];
[loadingView release];
loadingView = nil;
}
НАДЕЕТСЯ ЭТО ПОМОЩЬ. спасибо
В XIB файле поместите UIView и UIActivityIndicatorView. Задайте свойство ActivityIndicatorView SetAnimated да.
@property (сохранить, неатомный) IBOutlet UIView * m_LoadingView;
При запуске длительных операций добавьте LoadView в представление
m_LoadingView.layer.cornerRadius = 10;
m_LoadingView.center = self.view.center;
[self.view addSubview:m_LoadingView];
После завершения процесса Remove UploadView из супер-представления. [m_LoadingView removeFromSuperView];