如何在多个视图中使用一个活动指示器?

时间:2013-12-17 05:53:37

标签: ios iphone uiactivityindicatorview

我有一个SpinnerController类,它有活动指示器的方法

-(void)StartSpinner
 {

   [spinner startAnimating];

  spinner.hidden=YES;

      spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(141.0, 190.0,  

      80.0, 80.0)];

       [self.view addSubview:spinner];
     NSLog(@"Spinner running");
    }

   -(void)StopSpinner
   {

    [spinner stopAnimating];

  spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(141.0, 190.0, 80.0, 

    80.0)];

   [self.view addSubview:spinner];

     }

我有8个其他viewControllers,我想使用上述功能的活动指示器。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以创建活动指标的共享实例。它将帮助您创建单个实例并在整个代码中进行管理。您可以参考MBProgressHUD代码。

答案 1 :(得分:1)

有两件事可以帮助您改善代码。

首先,懒惰地实例化UIActivityIndicatorView。我喜欢在私人ivars前加下划线,但这不是必需的。

-(UIActivityIndicatorView *) spinner
{
    if (_spinner == nil)
    {
       _spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(141.0, 190.0, 80.0, 80.0)];
       _spinner.hidesWhenStopped = YES;
       [self.view addSubview:_spinner];
    }
    return _spinner;
}

现在您可以使用[self spinner]始终引用相同的对象引用。

-(void)StartSpinner
{
    [[self spinner] startAnimating];
}
-(void)StopSpinner
{
    [[self spinner] stopAnimating];
}

现在您可以将其他视图控制器创建为SpinnerController的子类以继承该功能。

答案 2 :(得分:1)

您需要使用

公开方法
+(void)StartSpinner
{
    ....
}

并在.h文件中声明为,

 +(void)StartSpinner;

在其他视图控制器中,导入此类并按如下方式调用方法:

[SpinnerController StartSpinner];

和其他方法类似。

答案 3 :(得分:1)

U可以执行以下操作,在SharedController中编写以下代码

- (UIAlertView *)createProgressViewToParentView:(UIView *)view withTitle:(NSString *)title
{
Alert_UserLocation = [[UIAlertView alloc] initWithTitle:@"" message:title delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
[Alert_UserLocation show];

UIActivityIndicatorView *loaderView = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(130, 60, 25, 25)];
loaderView.tag = 3333;
loaderView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
loaderView.backgroundColor = [UIColor clearColor];
[Alert_UserLocation addSubview:loaderView];
[loaderView startAnimating];
[loaderView release];
return Alert_UserLocation;
}

- (void)hideProgressView:(UIAlertView *)inProgressView
{
if(Alert_UserLocation != nil)
{
    [Alert_UserLocation dismissWithClickedButtonIndex:0 animated:YES];
    Alert_UserLocation = nil;
}
}

导入sharedController并在View控制器中为sharedController创建一个对象,如下所示

  sharedController = [SharedController sharedController];
  self.progressView = [sharedController createProgressViewToParentView:self.view withTitle:@"Loading..."];

您必须在代码

之后关闭使用
    [sharedController hideProgressView:self.progressView];