UIActivity指标未显示在ios应用程序启动时

时间:2013-01-17 21:12:29

标签: ios animation nsthread uiactivityindicatorview

我正在尝试使用iOS中的活动指示器而无法使用。我在Stackoverflow上跟踪了一个线程并使用它。这就是我写的:

-(void)viewDidLoad
{
    [NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:self];

    UITapGestureRecognizer *tGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doThisForTap:)];
    tGR.numberOfTapsRequired = 1;

    [myRollTypeLabel addGestureRecognizer:tGR];
    myRollTypeLabel.userInteractionEnabled = YES;

    [self.scrollView addSubview:myRollTypeLabel];
}

- (void) threadStartAnimating:(id)data
 {
self.activityIndicatorNew =[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.activityIndicatorNew.color = [UIColor redColor];
[self.activityIndicatorNew startAnimating];
 }
- (void)doThisForTap :(UIGestureRecognizer *)gest
{
  //lots of computation.
}
- (void)viewWillDisappear:(BOOL)animated
{
[self.activityIndicatorNew stopAnimating];
self.activityIndicatorNew.hidden = YES;
}

但活动指标根本没有出现?在方法“doThisForTap”中,我进行计算并移动到另一个UIViewController。但我看不到活动指标。我究竟做错了什么?如果您需要更多信息,请询问。感谢..

1 个答案:

答案 0 :(得分:1)

看起来好像您实际上是使用addSubview将指标添加到视图层次结构中:

您正在实例化它,将其分配给属性,并启动它动画,但从未实际将其添加到视图层次结构中(据我所见)。

要在屏幕中添加活动指示器,您应设置其原点,然后将其添加到它应出现的任何视图中:

self.activityIndicatorNew =[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.activityIndicatorNew.color = [UIColor redColor];

CGRect indicatorFrame = self.activityIndicatorNew.frame;
indicatorFrame.origin.x = // x coordinate goes here;
indicatorFrame.origin.y = // y coordinate goes here;
self.activityIndicatorNew.frame = indicatorFrame;

[self.view addSubview:self.activityIndicatorNew];

[self.activityIndicatorNew startAnimating];

您不应该在后台线程中执行上述大部分工作,因为除了主线程之外,您不应该操纵视图层次结构。

如果你确实需要在后台线程中启动指标动画(不完全相信你从你所显示的代码中做过),那么在后台线程中唯一安全的做法就是调用startAnimating 。在分离新线程之前,其他所有内容都应该进入viewDidLoad。

但是,我首先尝试在viewDidLoad中完成所有操作,如果绝对必要,只使用后台线程。

就个人而言,我会使用Interface Builder;我想不出有很多理由在代码中实例化一个简单的活动指标。