0

我有一个调用外部网络服务的方法。现在我想UIActivityIndicatorView在屏幕中间显示一个,同时 webservice-call 正在运行。我异步调用 webservice-method。但是对于我在底部找到的代码,我有两个问题:

  1. 当前视图未锁定。这意味着,用户可以与当前视图进行交互。我想阻止所有直到动画停止
  2. 动画不居中

这是我现在尝试过的代码:

-(void)saveDataOnServer {
    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(225, 115, 30, 30)];
    [activity setBackgroundColor:[UIColor clearColor]];
    [activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
    [self.view addSubview:activity];
    [activity startAnimating];

    // ...     

    [NSURLConnection sendAsynchronousRequest: request
                                       queue: queue
                           completionHandler: ^(NSURLResponse *response, NSData *data, NSError *error) {

                               [activity stopAnimating];

                               // ...
                           }
     ];
}
4

2 回答 2

2

当活动指示器开始时,您必须放置另一个视图:

 UIView *overlayView;
 overlayView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
 overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
 [[UIApplication sharedApplication].keyWindow addSubview:overlayView];

并在活动指示器停止时删除该视图(overlayView):

 [overlayView removeFromSuperview];

此 OverlayView 将覆盖当前视图。因此用户无法与当前视图交互。

于 2013-06-25T09:11:20.727 回答
0

嗨,我有一个很好的解决方案给你.. 有一个名为 MBProgressHUD 的库,它可以满足你的所有需求,风格是这里的库链接

而且它易于使用..这是我使用的一个例子

self.hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
self.hud.mode = MBProgressHUDModeIndeterminate;
self.hud.labelText = @"Fetching News";
//self.hud.detailsLabelText=@"Fetching News";
self.hud.dimBackground = YES;

你可以看到一个演示..干杯:D

于 2013-06-25T09:07:30.033 回答