UIActivityIndicatorView不旋转
问题描述:
我有这个问题,我将UIActivityIndicatorView
添加到UIScrollView
;一切工作正常,除非UIScrollView
滚动,否则它不会开始旋转。UIActivityIndicatorView不旋转
任何人都可以帮助我解决这个问题吗?
谢谢。
这里是一些代码:
UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
loaderActivity.center = CGPointMake(87/2,y+56/2);
loaderActivity.tag=tag;
[mainScrollView addSubview:loaderActivity];
[loaderActivity startAnimating];
[loaderActivity release];
答
尝试在不同的线程中运行动画。
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
答
activityIndicator = [[UIActivityIndicatorView alloc]
initWithFrame:CGRectMake(87/2,y+56/2);
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.tag=tag;
[mainScrollView addSubview:loaderActivity];
[activityIndicator startAnimating];
[activityIndicator release];
答
,它不是动画,直到您在滚动视图滚动的事实是,你要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];
}
答
当初,我在viewDidLoad
作出startAnimating
呼叫,没有工作的问题。我将电话转移到viewWillAppear
,它工作!
请问您可以在此处添加代码以获得更多关于问题的许可。 – 2012-04-03 10:50:22
还有一件事要开始活动运行,您需要在活动添加到视图中或任何事件(如按钮单击或仅稍微延迟设置执行选择器)之后调用方法。 – 2012-04-03 10:52:05
你在主线程中执行另一个任务吗?如果是这样,主线程将用于该任务,并将停止动画,直到该任务完成。 – 2012-04-03 10:52:21