4

ここに問題があります-UIView(カード)のサブクラスであるクラスがあります。それ自体にボタンを作成し、ユーザーがボタンに触れたときに changeStateIndicator: を呼び出しています。

次に、ボタンが押された後にカードを裏返す必要があり、ボタンの色 (実際には画像) が変わるはずです。しかし、それはまったく起こっていないので、ボタンが変更される前にフリップが開始されます。これが私のコードです:

//Adding a button to my view
UIButton *changeStateButton = [UIButton buttonWithType:UIButtonTypeCustom];
[changeStateButton setImage:[UIImage imageNamed:imageToInitWith] forState:UIControlStateNormal];
[changeStateButton setImage:[UIImage imageNamed:imageToInitWith] forState:UIControlStateHighlighted];
changeStateButton.frame = CGRectMake(0, 0, 30, 30);
changeStateButton.center = CGPointMake(self.bounds.size.width/2+([myWord length]*8)+17, 35);
changeStateButton.tag = 77;
[changeStateButton addTarget:self action:@selector(changeStateIndicator:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:changeStateButton];

//Method which is called when the button is touched
- (void)changeStateIndicator:(UIButton *)sender
{
    [sender setImage:[UIImage imageNamed:@"StateYellow"] forState:UIControlStateNormal];
    [sender setImage:[UIImage imageNamed:@"StateYellow"] forState:UIControlStateHighlighted];
    currentWord.done = [NSNumber numberWithInt:currentWord.done.intValue-10];
    [self prepareForTest];
}

//Method which flips the card
- (void)prepareForTest
{
    testSide = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"cal_small3"]];
    [UIView transitionFromView:self toView:testSide duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight completion:nil];
}

メソッド -changeStateIndicator が終了するまで、送信者は画像を変更しないと思いますが、これが実際の問題かどうかはわかりません。お願い助けて。

4

2 に答える 2

3

この呼び出しを延期してみてください:

dispatch_async(dispatch_get_main_queue(), ^{ [self prepareForTest]; });

その種の動作はするが、それでも希望どおりにならない場合は、dispatch_after() またはを使用します。

[self performSelector:@selector(prepareForTest) withObject:nil afterDelay:0.25f];

(必要に応じて、ディスパッチの代わりに「0」の時間で2番目の呼び出しを使用できます-同じことです。)

于 2012-07-24T22:21:16.257 に答える
0

drawRect:メソッドが呼び出されたときにボタン自体を再描画するには、実行ループをもう一度実行する必要があります。このsetImage:メソッドは、そのときに使用する画像を設定するだけです。代わりに、これが発生する前にアニメーションを開始します。これが、非常に短い遅延で問題が解決する理由です。

これを修正するもう 1 つの方法は、ボタン イメージの変更をアニメーション化することです。そのアニメーションが完了したら、別のアニメーションを開始します。

于 2012-07-24T22:16:58.517 に答える