Создание представления «загрузка ...» с помощью iPhone SDK - PullRequest
13 голосов
/ 05 мая 2009

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

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

Пример на следующем скриншоте:

Screenshot

Ответы [ 7 ]

17 голосов
/ 05 мая 2009

Это фактически недокументированный (в любом случае в 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]; 
} 
14 голосов
/ 12 августа 2009

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

11 голосов
/ 19 апреля 2012

Я думаю, что самый простой (несколько строк кода), полностью документированный и самый красивый способ - это использовать UIAlertView с UIActivityIndicatorView:

http://iosdevelopertips.com/user-interface/uialertview-without-buttons-please-wait-dialog.html

UIAlertView с UIActivityIndicatorView http://iosdevelopertips.com/wp-content/uploads/2010/02/alert3-204x300.png

4 голосов
/ 05 мая 2009

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

4 голосов
/ 05 мая 2009

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

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

1 голос
/ 28 ноября 2011

Я использую LoadingHUDView для этой цели, и это работает всегда.

получить ЗагрузкаHUDView.m и ЗагрузкаHUDView.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;
}

НАДЕЖДА ЭТО ПОМОГАЕТ. спасибо

0 голосов
/ 28 сентября 2012

В файле XIB поместите UIView и UIActivityIndicatorView. Установите свойство ActivityIndicatorView SetAnimated на Да.

@ свойство (сохранить, неатомное) IBOutlet UIView * m_LoadingView;

При запуске длительных операций добавьте представление ViewView к представлению

m_LoadingView.layer.cornerRadius = 10;
m_LoadingView.center = self.view.center;
[self.view addSubview:m_LoadingView];

После завершения процесса, удалите LoadingView из супер просмотра. [m_LoadingView removeFromSuperView];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...