2

iPhoneアプリでアクティビティインジケーターを使用していますが、問題は、行を書くときに

 [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];
}
}
4

3 に答える 3

2

編集:ActivityIndi​​catorから2つのクラスをダウンロードします

Add this class file in your project. Also add QuartzCore framweork in project.

#import "SHKActivityIndicator.h" //in your .pch file of project

以下に示す使用方法:行の下のインジケーターの使用を示します。

    [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];
}
于 2012-09-03T10:37:56.847 に答える
1

この行を-(IBAction)ボタンのに追加すると、ボタンのアクションがすぐに実行され、次のビューがほぼすぐに表示されるため、アニメーション化されたアクティビティインジケーターは表示されません。UIButtonしたがって、プログラムでビルドし、-(void)関数toをのセレクターとして使用しますUIButton。その場合、[indicator startAnimating];ボタンメソッドの残りの部分が呼び出されます。

それ以外の場合は、でアクションを遅らせることができます-(IBAction)

于 2012-09-03T10:44:43.717 に答える
0

方法はNSURLConnection基づいていると思います。synchronousデータ送信部分はメインを一時停止する部分である可能性がありますUIThread。そのため、activityIndi​​catorはアニメーション化されません。

より良い方法は、データ投稿部分を別のスレッドに移動することです。以下を置き換えます。

[indicator startAnimating];
[self submitSurveyAnswers];

[self submitSurveyAnswersOne];
[self submitSurveyAnswersTwo];

OnlineViewController*targetController=[[OnlineViewController alloc]init];
targetController.mynumber=mynumber;
[self.navigationController pushViewController:targetController animated:YES];

と:

[indicator startAnimating];
[NSThread detachNewThreadSelector:@selector(startPosting:) toTarget:self withObject:nil];

2つのメソッドを作成します。

-(void)startPosting{
  [self submitSurveyAnswers];
  [self submitSurveyAnswersOne];
  [self submitSurveyAnswersTwo];
}

-(void)dataSubmissionComplete{
  OnlineViewController*targetController=[[OnlineViewController alloc]init];
  targetController.mynumber=mynumber;
  [self.navigationController pushViewController:targetController animated:YES];
}

dataSubmissionComplete次に、データが正常に送信されたら、メインスレッドで次のようにメソッドを呼び出します。

[self performSelectorOnMainThread:@selector(dataSubmissionComplete) withObject:nil waitUntilDone:YES];

このプロセスは通常、データがバックグラウンドで別のスレッドにフェッチ/投稿されているときにUIスレッドがアクティビティインジケーターをアニメーション化するような状況で実行されます。

編集-カスタムアクティビティインジケーターが必要な場合は、これこれ、およびこのオープンソースのアクティビティインジケーターファイルとチュートリアルをご覧ください。

于 2012-09-03T12:49:59.350 に答える