0

私のコードは次のようなものです:

- (void)buttonClick
{
  [self.progressIndicator startAnimation:self];
  [self.textView setHidden:YES];  

  // some process

  [self.progressIndicator stopAnimation:self];
  [self.textView setHidden:NO];
}

問題はtextView隠れていないことです。progressIndicatorおそらく他のスレッドで実行されているため、適切に動作します。しかし、textView他のスレッドに隠れようとしたり、バックグラウンドで実行しようとすると、うまくいきません。

4

2 に答える 2

0

スレッドを同期するセレクターを遅延させてから呼び出すことができます (ただし、これは最善の方法ではないかもしれませんが、OperationQueue と GCD も使用できます)。しかし、これはあなたの目的に役立ちます:

あなたの質問とコメントには両方が含まれているので、私は NSTextField と NSTextView を使用しました。

-(void)someProcess:(id)sender{
    for (int i=0; i<100000; i++) {
        for (int j=0; j<9000; j++) {
            ;
        }
    }
    NSLog(@"someProcess ends");
}

-(void)startProgressIndicator{
    [self.progressIndicator startAnimation:self];
}
-(void)stopProgressIndicator{
    [self.progressIndicator stopAnimation:self];
}
-(void)hideScroll{
    [self.textField setHidden:YES];
    [self.scrollView setHidden:YES];
}
-(void)showScroll{
    [self.textField setHidden:NO];
    [self.scrollView setHidden:NO];
}


- (IBAction)button:(id)sender {
    //hide scrollview
    NSLog(@"hide sv");
    [self hideScroll];

    //start prog indi
    NSLog(@"run");
    [self performSelector:@selector(startProgressIndicator) withObject:self afterDelay:1];

    //some process
    [self someProcess:nil];


    //stop prog indi
    NSLog(@"stop");
    [self performSelector:@selector(stopProgressIndicator) withObject:self afterDelay:1];


    //show scrollview
    NSLog(@"show sv\n\n\n\n");
    [self performSelector:@selector(showScroll) withObject:self afterDelay:1];

}
于 2013-01-25T10:43:35.937 に答える
0

NSTextView埋め込みNSScrollViewも非表示にする必要がありますNSScrollView

 - (void)buttonClick
{
  [self.progressIndicator startAnimation:self];
  [self.textView setHidden:YES]; 
  [scrollview setHidden:YES]; 

  // some process

  [self.progressIndicator stopAnimation:self];
  [self.textView setHidden:NO];
  [scrollview setHidden:NO];
}
于 2013-01-23T13:41:42.123 に答える