使用iPhone SDK创建“加载...”视图

时间:2009-05-05 02:41:07

标签: iphone cocoa-touch

当一些长期待处理操作正在进行时,如何创建许多应用程序使用的黑/灰模式弹出窗口类型?

就像使用基于位置的服务,加载网页一样,屏幕变暗,并且有一个模态视图显示旋转图标“请稍候......”

以下屏幕截图中的示例:

Screenshot

7 个答案:

答案 0 :(得分:17)

这实际上是无证件(无论如何在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]; 
} 

答案 1 :(得分:14)

如果你想避免未记录的api,你也可以看看MBProgressHUD。它与UIProgressHUD类似,甚至还有一些额外的功能。

答案 2 :(得分:11)

答案 3 :(得分:4)

如果您将UIView添加为主窗口的子视图,它将覆盖整个UI。使其部分透明,部分半透明,看起来像弹出窗口。

此示例显示如何fade the Default.png splash screen,从这开始,向应用程序委托(具有指向主窗口的指针)添加几个方法以显示和关闭进度视图非常简单。

答案 4 :(得分:4)

查看Wordpress iPhone应用程序(http://iphone.wordpress.org/),了解如何在不使用任何未记录的API的情况下执行此操作的示例。

答案 5 :(得分:1)

我为此目的使用 LoadingHUDView ,它始终有效。

获取LoadingHUDView.mLoadingHUDView.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;
}

希望这有助于此。 谢谢

答案 6 :(得分:0)

在XIB文件中,放置UIView和UIActivityIndi​​catorView。 将ActivityIndi​​catorView属性SetAnimated设置为是。

@property(保留,非原子)IBOutlet UIView * m_LoadingView;

启动长操作时,将LoadingView添加到视图

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

完成此过程后,从超级视图中删除LoadingView。     [m_LoadingView removeFromSuperView];