2012-04-03 95 views
5

我有这个问题,我将UIActivityIndicatorView添加到UIScrollView;一切工作正常,除非UIScrollView滚动,否则它不会开始旋转。UIActivityIndi​​catorView不旋转

任何人都可以帮助我解决这个问题吗?

谢谢。

这里是一些代码:

UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [mainScrollView addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
+0

请问您可以在此处添加代码以获得更多关于问题的许可。 – 2012-04-03 10:50:22

+0

还有一件事要开始活动运行,您需要在活动添加到视图中或任何事件(如按钮单击或仅稍微延迟设置执行选择器)之后调用方法。 – 2012-04-03 10:52:05

+0

你在主线程中执行另一个任务吗?如果是这样,主线程将用于该任务,并将停止动画,直到该任务完成。 – 2012-04-03 10:52:21

回答

6

你需要调用startAnimating对活动的指标有它的动画。或者在界面生成器中,您可以勾选“动画”复选框。

+0

为什么这个答案不被接受? – Omeed 2016-09-23 15:02:07

+0

一个更好的问题是,什么是非动画活动指示器,为什么会是默认状态? – devios1 2017-02-27 21:43:10

0

尝试在不同的线程中运行动画。

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(showProgress) object:nil]; 
[thread start]; 

//do whatever your want here 

//call this when you want it stop animating 
    [activityIndicator stopAnimating]; 
    [thread release]; 


- (void)showProgress{ 

    [activityIndicator startAnimating]; 

} 
+0

我不认为这是一个线程问题。不过谢谢你 – astazed 2012-04-03 11:48:35

2
activityIndicator = [[UIActivityIndicatorView alloc] 
initWithFrame:CGRectMake(87/2,y+56/2); 
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite]; 
activityIndicator.tag=tag; 
[mainScrollView addSubview:loaderActivity]; 
[activityIndicator startAnimating]; 
[activityIndicator release]; 
3

,它不是动画,直到您在滚动视图滚动的事实是,你要startAnimating电话在后台线程正在发生的症状。 UIKit调用应该在主线程中进行。

您可以验证它在后台线程中加入代码是这样发生的:

if ([NSThread isMainThread]) { 
    NSLog(@"Running on main thread."); 
} else { 
    NSLog(@"Running on background thread."); 
} 

你要确保你在你的问题显示在主线程上运行的代码。要做到这一点,你可以改变你的代码看起来是这样的:

// this code would be wherever your existing code was 
[self performSelectorOnMainThread:@selector(addActivityIndicatorToView:) withObject:mainScrollView waitUntilDone:YES]; 

// this would be a new method in the same class that your existing code is in 
- (void) addActivityIndicatorToView:(UIView*) view { 
    UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [view addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
} 
0

当初,我在viewDidLoad作出startAnimating呼叫,没有工作的问题。我将电话转移到viewWillAppear,它工作!

相关问题