当一些长期待处理操作正在进行时,如何创建许多应用程序使用的黑/灰模式弹出窗口类型?
就像使用基于位置的服务,加载网页一样,屏幕变暗,并且有一个模态视图显示旋转图标“请稍候......”
以下屏幕截图中的示例:
答案 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)
我认为最简单的(几行代码),完全记录和最美的方式是使用带有UIActivityIndicatorView的UIAlertView:
http://iosdevelopertips.com/user-interface/uialertview-without-buttons-please-wait-dialog.html
答案 3 :(得分:4)
如果您将UIView添加为主窗口的子视图,它将覆盖整个UI。使其部分透明,部分半透明,看起来像弹出窗口。
此示例显示如何fade the Default.png splash screen,从这开始,向应用程序委托(具有指向主窗口的指针)添加几个方法以显示和关闭进度视图非常简单。
答案 4 :(得分:4)
查看Wordpress iPhone应用程序(http://iphone.wordpress.org/),了解如何在不使用任何未记录的API的情况下执行此操作的示例。
答案 5 :(得分:1)
我为此目的使用 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;
}
希望这有助于此。 谢谢
答案 6 :(得分:0)
在XIB文件中,放置UIView和UIActivityIndicatorView。 将ActivityIndicatorView属性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];