0

我正在尝试在 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。但我看不到活动指示器。我究竟做错了什么?如果您需要更多信息,请询问。谢谢..

4

1 回答 1

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;我想不出很多理由在代码中实例化一个简单的活动指示器。

于 2013-01-17T22:37:18.607 回答