使用一个ActivityIndi​​cator和两个类

时间:2012-10-25 09:08:11

标签: objective-c ios objective-c-blocks uiactivityindicatorview

我有一个UIActivityIndicator,它会在我的所有视图的顶部开始制作动画。在他开始制作动画后,会弹出当前视图的父视图。现在,在他动画之后,我正在调用另一个带有块的类并运行一些服务器命令。

我的问题是,在另一个类我从服务器获得响应,但我不能告诉 UIActivityIndicator停止,因为他在另一个班级。 (我不得不说我不想在Application Delegate上实现任何内容)。

在服务器类上,收到响应后,会出现UIAlertView,但UIAlertView在服务器类中实现。这就是我希望UIActivityIndicator停止的地方。

我希望我能理解,如果没有,请告诉我。

谢谢。

- (void)buttonPressed:(id)sender
{
    UIView * darkView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
    darkView.backgroundColor = [UIColor blackColor];
    darkView.alpha = 0.5f;

    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [darkView addSubview:activityIndicator];
    activityIndicator.center = darkView.center;

    [activityIndicator startAnimating];
    [[UIApplication sharedApplication].keyWindow addSubview:darkView];

    // Inside this class (ShareByEmail) there is a UIAlertView that should stop the 
    // animation that already running right now.
    ShareByEmail *sbe = [[ShareByEmail alloc]init];
    [sbe share];

    [self.navigationController popViewControllerAnimated:YES];
}

1 个答案:

答案 0 :(得分:1)

一种选择是将UIActivityIndicator保持为单例对象,并在项目的任何位置使用它。另一个选择是使用notifications尝试此操作。您需要向此活动指示符添加和删除观察者,并且无论何时触发/执行请求,您都需要发布通知以启动/停止活动指示符。

<强>更新

在您的情况下,您可以在为活动指示器分配内存后立即将其设置为[[NSNotificationCenter defaultCenter] addObserver:activityIndicator selector:@selector(startAnimating) name:@"startActivityIndicator" object:nil][[NSNotificationCenter defaultCenter] addObserver:activityIndicator selector:@selector(stopAnimating) name:@"stopActivityIndicator" object:nil]。现在,只要您想要启动或停止它,请致电[[NSNotificationCenter defaultCenter] postNotificationName:@"startActivityIndicator" object:nil][[NSNotificationCenter defaultCenter] postNotificationName:@"stopActivityIndicator" object:nil]。确保未释放活动指示器。我建议你将你的活动指示器声明为这个类中的类级别变量,并在init方法中分配内存。在按下按钮的方法中,您可以使用[darkView addSubview:activityIndicator];