Создание представления "Загрузка..." с помощью iPhone SDK

Как создать черно-серый модальный всплывающий вид, который используется многими приложениями, когда выполняется некоторая длинная ожидающая операция?

Как и при использовании служб на основе местоположения, загрузки веб-страницы, экран становится тусклым, и есть модальный вид, показывающий значок поворота "Подождите..."

Пример на следующем снимке экрана:

Screenshot

Ответы

Ответ 1

Если вы хотите избежать недокументированного api, вы также можете взглянуть на MBProgressHUD. Он похож на UIProgressHUD и даже имеет некоторые дополнительные функции.

Ответ 2

Это фактически недокументированное (в любом случае, 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]; 
} 

Ответ 4

Если вы добавите UIView в качестве подзона в главном окне, он будет охватывать весь пользовательский интерфейс. Сделайте его частично прозрачным и частично полупрозрачным, и он будет выглядеть как всплывающее окно.

В этом примере показано, как исчезать заставку Default.png, начиная с этого довольно просто добавить несколько методов в ваше приложение делегат (который имеет указатель на главное окно), чтобы представить и отклонить представление прогресса.

Ответ 5

Взгляните на приложение Wordpress iPhone (http://iphone.wordpress.org/) для примера того, как это сделать без использования каких-либо недокументированных API.

Ответ 6

Я использую 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;
}

НАДЕЕТСЯ ЭТО ПОМОЩЬ. спасибо

Ответ 7

В 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];