Iphone UIActivityIndicator未设置动画
我在iphone应用程序中使用活动指示器,但问题是当我写这行时Iphone UIActivityIndicator未设置动画,iphone,xcode,uiactivityindicatorview,Iphone,Xcode,Uiactivityindicatorview,我在iphone应用程序中使用活动指示器,但问题是当我写这行时 [indicator startAnimating]; 在viewDidLoad中,它会设置动画,但当我在移动到下一个屏幕的按钮代码中写入同一行时,它不会设置动画 -(IBAction)nextButtonClicked{ if ([professionLabel.text isEqualToString:@"Profession"]) { errorLabel.text=@"Please Select the High
[indicator startAnimating];
在viewDidLoad中,它会设置动画,但当我在移动到下一个屏幕的按钮代码中写入同一行时,它不会设置动画
-(IBAction)nextButtonClicked{
if ([professionLabel.text isEqualToString:@"Profession"]) {
errorLabel.text=@"Please Select the Highliteg Answers";
Q1.textColor=[UIColor redColor];
}
if ([workLabel.text isEqualToString:@"Work"]) {
errorLabel.text=@"Please Select the Highlight Answers";
Q2.textColor=[UIColor redColor];
}
if([yearLabel.text isEqualToString:@"Year"]){
errorLabel.text=@"Please Select the Highliteg Answers";
Q3.textColor=[UIColor redColor];
}
else{
errorLabel.text=@"";
Q1.textColor=[UIColor ];
Q2.textColor=[UIColor];
Q3.textColor=[UIColor];
[indicator startAnimating];
[self submitSurveyAnswers];
[self submitSurveyAnswersOne];
[self submitSurveyAnswersTwo];
OnlineViewController*targetController=[[OnlineViewController alloc]init];
targetController.mynumber=mynumber;
[self.navigationController pushViewController:targetController animated:YES];
}
}
编辑:从 如何使用下面给出的:显示线下的指示器使用
[NSThread detachNewThreadSelector:@selector(startActivity:) toTarget:self
withObject:nil]
-(void)startActivity:(id)sender // add this method
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[SHKActivityIndicator currentIndicator] displayActivity:@"Cropping Image"];
[pool release];
}
按如下方式隐藏您想要的任何位置:
[[SHKActivityIndicator currentIndicator] hide];
通过替换[indicator startAnimating]在按钮事件中添加这行代码
[NSThread detachNewThreadSelector:@selector(startActivity:) toTarget:self withObject:nil];
添加以下将被调用的方法:
-(void)startActivity:(id)sender
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[indicator startAnimating];
[pool release];
}
如果将此行添加到按钮的
-(iAction)
,则不会显示活动指示器动画,因为按钮操作是即时的,下一个视图几乎会立即显示。因此,要么以编程方式构建ui按钮
,要么使用-(void)
函数作为ui按钮
的选择器。在这种情况下,[指示器开始激活]
将被调用,然后是button方法的其余部分
否则,您可以简单地延迟
-(iAction)
中的操作。我猜这些方法是基于NSURLConnection
的。数据发送部分可能是同步的
,它会暂停主UIThread
,这就是为什么activityIndicator不会设置动画
更好的方法是将数据发布部分移动到另一个线程。替换以下内容:
[indicator startAnimating];
[self submitSurveyAnswers];
[self submitSurveyAnswersOne];
[self submitSurveyAnswersTwo];
OnlineViewController*targetController=[[OnlineViewController alloc]init];
targetController.mynumber=mynumber;
[self.navigationController pushViewController:targetController animated:YES];
与:
并创建两种方法:
-(void)startPosting{
[self submitSurveyAnswers];
[self submitSurveyAnswersOne];
[self submitSurveyAnswersTwo];
}
&
然后在成功提交数据后,在主线程上调用方法dataSubmissionComplete
,如下所示:
[self performSelectorOnMainThread:@selector(dataSubmissionComplete) withObject:nil waitUntilDone:YES];
在这样的情况下,当数据在后台的另一个线程上获取/发布时,UI线程会为活动指示器设置动画,通常会遵循此过程
编辑-如果您想要自定义活动指示器,请查看并打开带有教程的源代码活动指示器文件。但是当您提交它时,您正在推送一个新视图,并且您的UIActivityIndicator视图在您的上一个视图中,而现在您的当前视图在屏幕上。请明确这实际上是从非主线程调用UIKit,这通常是个坏主意。这是wokring,但如果我希望此活动指示器与UIAlertView之类的windows中的活动指示器相同,那么是否可以像appYes中那样添加此指示器,您应该延迟要执行的操作,使用
性能选择器:withObject:afterDelay:
或任何其他方式。问题是,您立即开始提交答案,而您没有给UIKit时间开始设置指示器动画。
-(void)startPosting{
[self submitSurveyAnswers];
[self submitSurveyAnswersOne];
[self submitSurveyAnswersTwo];
}
-(void)dataSubmissionComplete{
OnlineViewController*targetController=[[OnlineViewController alloc]init];
targetController.mynumber=mynumber;
[self.navigationController pushViewController:targetController animated:YES];
}
[self performSelectorOnMainThread:@selector(dataSubmissionComplete) withObject:nil waitUntilDone:YES];