我正在尝试使用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。但我看不到活动指标。我究竟做错了什么?如果您需要更多信息,请询问。感谢..
答案 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;我想不出有很多理由在代码中实例化一个简单的活动指标。