0

クリックしたときにボタン loadImgButton を非表示にしたい。このボタンは、以下のメソッドを呼び出します。

- (IBAction)produceImage:(id)sender
{

    [loadImgButton setHidden:YES];

    [image1 setImage:[UIImage imageNamed:@"Fanny2.JPG"]];
    [image2 setImage:[UIImage imageNamed:@"Fanny3.JPG"]];

    NSLog(@"i am here");

    for (int i = 0; i < 100000; i++) {
        for(int j = 0;j < 10000; j++) {

        }
    }
}

The problem is that the button is not hidden and the image is not set until the function is finish. What is the reason cause this situation and how to fix it? Thanks!
4

6 に答える 6

1

UI の更新は実行ループで行われます。このようなメソッドは、setHidden後で UI を更新できるようにフラグを設定するだけです。「Is there a way to make drawRect work right NOW?」 を参照して、UI を強制的にすぐに更新する方法を確認してください。ただし、必要な結果を得るには他の方法を検討する方がよい場合があります。

于 2012-05-02T06:21:37.243 に答える
0

これを試して

-(IBAction)buttonPressed:(id)sender{

[(UIButton*)sender performSelectorInBackground:@selector(setHidden:) withObject:[NSNumber numberWithBool:YES]];
NSLog(@"heeere");

for (int i = 0; i < 100000; i++) {
    for(int j = 0;j < 10000; j++) {

    }
}

}

于 2012-05-02T08:44:23.950 に答える
0

ボタンが非表示になっていない場合、nib ファイルをチェックしてボタン オブジェクトをチェックアウトすると、ファイルに接続されているかどうかがわかりません。

于 2012-05-02T06:28:33.373 に答える
0

1 つの新しいメソッドを作成します。

- (IBAction)produceImage:(id)sender

{

[loadImgButton setHidden:YES];

[self new];

} -(ボイド)新しい {

[image1 setImage:[UIImage imageNamed:@"Fanny2.JPG"]];
[image2 setImage:[UIImage imageNamed:@"Fanny3.JPG"]];

NSLog(@"i am here");

for (int i = 0; i < 100000; i++) {
    for(int j = 0;j < 10000; j++) {

    }
}

}

于 2012-05-02T06:42:36.900 に答える
0
- (IBAction)produceImage:(id)sender
{

     [loadImgButton setHidden:YES];

     // Call another function which download image with delay

    [self performSelector:@selector(image:) withObject:sender afterDelay:2];

}

- (IBAction)image:(id)sender
{
    [image1 setImage:[UIImage imageNamed:@"Fanny2.JPG"]];

    [image2 setImage:[UIImage imageNamed:@"Fanny3.JPG"]];

    NSLog(@"i am here");

    for (int i = 0; i < 100000; i++) {
        for(int j = 0;j < 10000; j++) {

        }
    }

}
于 2012-05-02T06:20:34.087 に答える
0

完了時に関数を実行できるように、おそらくアニメーション ブロックを使用する必要があります。あなたのコードの問題は、 setHidden が、システムが近づいたときに実行されるリクエストを送信するだけだと私が信じていることです。そのため、最初に関数を実行しています。これを試して:

[UIView animateWithDuration:0.1 animations:^{

  [loadImgButton setHidden:YES];

} 
completion:^ (BOOL finished) {

 for (int i = 0; i < 100000; i++) {
    for(int j = 0;j < 10000; j++) {

    }
 }

}];
于 2012-05-02T06:22:13.500 に答える