万能的iPhone等待画面

为了改善程序的用户友好性,当你的iPhone 程序需要执行稍稍花点时间的处理的时候,我想显示一个标准的iPhone 等待画面是最合适的。那这里咱们使用iPhone SDK中提供标准的控件UIActivityIndicatorView ,来简单的实现Mac中经典的旋转轮等待画面。

效果图如下:

首先介绍一下UIActivityIndicatorViewUIActivityIndicatorView 其实是一个View,所以你可以作为一个子View加入到当前画面的里面。但是当你的程序画面比较多的时候需要每个View去添加UIActivityIndicatorView 就比较麻烦了不是。
所以懒人有懒方法,我个人给大家推荐一个简单的懒方法,就是把View添加到程序的唯一的Window中,然后在各个画面需要显示等待窗口的时候,统一调用AppDelegate中自定义的方法就可以了。

// 首先在程序开始的时候在加入window中加入UIActivityIndicatorView
 
- (void)applicationDidFinishLaunching:(UIApplication *)application {
RootViewController *viewController = [[RootViewController alloc]
initWithNibName:@"RootViewController"
bundle:nil];
self.rootViewController = viewController;
[viewController release];
[_window addSubview:_rootViewController.view];
// 初始化activityView,计算出当前窗口的中间位置
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc]
initWithFrame:CGRectMake(_window.bounds.size.width / 2 - 16.0f,
_window.bounds.size.height / 2 - 16.0f,
32.0f,
32.0f)];
activityView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
activityView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
| UIViewAutoresizingFlexibleRightMargin
| UIViewAutoresizingFlexibleTopMargin
| UIViewAutoresizingFlexibleBottomMargin;
activityView.hidesWhenStopped = YES;
// INDICATOR_VIEW是我自己定义的一个整数,例:#define INDICATOR_VIEW 10000
activityView.tag = INDICATOR_VIEW;
// 添加到window
[_window addSubview:activityView];
[activityView release];
[_window makeKeyAndVisible];
}

然后再修改AppDelegate类中加入自定义的方法,用来显示和隐藏等待旋转轮。

- (void)showActivityView {
[(UIActivityIndicatorView *)[_window viewWithTag:INDICATOR_VIEW] startAnimating];
}

- (void)hideActivityView {
// stop之后自动隐藏
[(UIActivityIndicatorView *)[_window viewWithTag:INDICATOR_VIEW] stopAnimating];
}

接下来就是在各个画面中的使用了,大致如下

XXXAppDelegate *appDelegate = (XXXAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate showActivityView];

另外补充一点,当你在调用显示等待画面代码的后面,有一断比较重的代码的时候,程序运行起来,并没有向你想的那样,马上显示等待画面,而是等那断比较重的 代码也运行完之后,等待画面再被显示,显然这不是你想要的结果。虽然有几种方法可以避免,比如你可以通过在viewWillAppear方法中分开等待画 面的显示,来避免但效果并不理想,会让你的程序感觉上很慢。另外你也可以启动一个Thread来运行也可以,不过好像更慢。有了下面这两个 viewController中自带的方法就很方便了,看名字就知道是什么功能了吧。

[self performSelectorInBackground:@selector(yourMethodName) withObject:nil];
[self performSelectorOnMainThread:@selector(yourMethodName) withObject:nil waitUntilDone:NO];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值