ios中为耗时动作添加indicatorview不可见问题及解决

        作为一个ios新手,在开发中总是会遇到很多问题。前几天遇到一个问题就是怎么在一个耗时动作之前添加一个indicator view(就是那个圆形的进度条,在那边转啊转的,提示用户程序正在处理某件事)。说实话,我对indicator view一点也不熟,这也是我第一次用它,我也不知道ios中有没有像android中一样的handler机制。没办法,网上找一下,终于知道indicator view怎么用了。

        这里以程序清理缓存为例,清理缓存是一个耗时动作。那么需要在开始清理前添加一个提示进度条(indicator view),在完成清理动作后,再自动取消indicator view。

       起先我想的比较简单,显示进度条:

    UIView *_view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    [_view setTag:108];
    [_view setBackgroundColor:[UIColor blackColor]];
    [_view setAlpha:0.5];
    [self.view addSubview:_view];
    
    activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
    [activityIndicator setCenter:self.view.center];
    [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
    [_view addSubview:activityIndicator];
    [activityIndicator startAnimating];


       然后隐藏进度条:

    [activityIndicator stopAnimating];
    UIView *view = (UIView*)[self.view viewWithTag:108];
    [view removeFromSuperview];
      在显示进度条和隐藏进度条之间的就是耗时动作了。然后运行程序,发现耗时动作都已经完成了,还没有看到进度条的显示。反复是,发现把耗时动作和隐藏进度条这两个动作去掉,只留显示进度条动作,是可以看到进度条的。

       然后我又把耗时动作去掉,用线程睡眠代替耗时动作,发现仍然不能看到进度条的显示效果。

       于是推测这个应该是ios的一种系统机制吧,那么此时就应该果断谷歌起来了,如果网上找了一会,果真发现一篇文章:

How to display an activity indicator or other UI before beginning a long task,里面也提到了这个indicator view不显示的问题是ios的一种机制。当然文章中只提供了解决方法,并没有深入讨论。

        解决方案:
        1.将耗时动作和隐藏indicatorview放到另外一个单独的方法中去。
        2.使用performSelector:@selector withObject: afterDelay:来触发耗时动作。
       
- (IBAction) someMethod
{
[theActivityIndicator startAnimating]; //显示indicator view
[self performSelector: @selector(doSomethingSlow)
withObject: nil
afterDelay: 0];
return;
}

- (void) doSomethingSlow
{
//执行耗时动作
[theActivityIndicator stopAnimating]; //执行完耗时动作之后,隐藏indicator view
}
            O啦~~~,参考文章:http://iphonedevsdk.com/forum/iphone-sdk-tutorials/82677-how-to-display-an-activity-indicator-or-other-ui-before-beginning-a-long-task.html
            转载请保留出处:http://blog.csdn.net/u011638883/article/details/12714213
            谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值