3

私はデリゲートに NSTimer を設定しようとしています - 私は Objective-C に非常に慣れていないので、これがあまり意味をなさない場合はお詫びします。しかし、私が書いたことは次のとおりです。

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0 / 60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView) userInfo:nil repeats:TRUE];

残念ながら、これは機能しません。誰かが私を正しい方向に向けることができますか? 私の心は揚げました!

4

2 に答える 2

4

のメソッド シグネチャdrawViewが正しくない可能性があります。NSTimer クラス リファレンスから:

タイマーが起動したときにターゲットに送信するメッセージ。セレクターには次の署名が必要です。

- (void)timerFireMethod:(NSTimer*)theTimer

したがって、drawViewメソッドは次のようになります。

- (void)drawView:(NSTimer*)theTimer
{
// Draw the view
}

また、コードを次のように修正します (「drawView」に続くコロンに注意してください)。

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0 / 60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView:) userInfo:nil repeats:TRUE];

ちなみに、あなたdrawViewが何を担当しているのかわかりません(ビューを描いていると思います)。ただし、描画には組み込みのメカニズムがあり、従う必要があります (まれな状況を除く)。通常、NSView がある場合は を呼び出しますsetNeedsDisplay。これにより、UI は NSView に NSView の を呼び出して自分自身を再描画するように指示しますdrawRect:。あなたがObjective-Cに不慣れだと言ったので、これについてのみ言及します。そのため、これに気付かず、必要以上のコードを書くことになるかもしれません。この設計に従えば、setNeedsDisplay定期的にタイマーを呼び出すことができます。

于 2010-01-29T17:09:14.757 に答える
3

あなたはそれを正しく持っています。

メソッド名にコロンを追加するだけです。つまり、@selector(drawView:) です。また、慣例により、Objective-C コーダーは YES と NO を使用します。

于 2010-01-29T17:11:37.550 に答える