0

ストロボのタイマーとしてCADisplayLinkを使用しています。

私は2つのCADisplayLinksを持っています:

主なもの(これはすべての間に実行されます):

SMPTELink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onTick)];
SMPTELink.frameInterval = 1;
[SMPTELink addToRunLoop:[NSRunLoop mainRunLoop]
                       forMode:NSDefaultRunLoopMode];

ストロボ1つ(これはストロボが発生したときにのみ実行されます):

strobeLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(toggleStrobe)];
strobeLink.frameInterval = 1;
[strobeLink addToRunLoop:[NSRunLoop mainRunLoop]
                     forMode:NSDefaultRunLoopMode];
[strobeLink setPaused:YES]; // I setPaused:NO when using the strobe.

2つのCADisplayLinkを同時に実行するのは悪いことですか?ストロボが思ったほどスムーズに見えないことがあります。これが私のtoggleStrobeメソッドです。

-(void)toggleStrobe {

    if (!self.firstTimestampStrobe)
        self.firstTimestampStrobe = strobeLink.timestamp;

    NSTimeInterval elapsed = (strobeLink.timestamp - self.firstTimestampStrobe);

    NSInteger frameNumber = (NSInteger)(elapsed * ((strobeValue*15)/255)) % 2;

    if (frameNumber != self.lastFrameStrobe)
    {
        if (frameNumber == 1) {

            UIColor *color = [[UIColor alloc] initWithRed: 0 green: 0 blue: 0 alpha: 1.0];
            strobeBackground.backgroundColor = color;

        } else {

            UIColor *color = [[UIColor alloc] initWithRed: 0 green: 0 blue: 0 alpha: 0];
            strobeBackground.backgroundColor = color;

        }

        self.lastFrameStrobe = frameNumber;
    }

}
4

2 に答える 2

2

表示リンクのポイントは、画面を更新するたびに描画できるようにすることです。なぜ2つ必要になるのかわかりません(表示が更新されたときに呼び出されるだけなので)。1つだけを使用して、更新するたびに表示する色を決定することはできませんか?

于 2013-02-21T19:21:38.760 に答える
0

それは悪くない..それはただ無意味です。

なぜ2つ必要なのですか?CADisplayLinkの目的は、表示が更新されるたびにメソッドを起動することです。2つの異なる速度で2つの異なることを発生させたい場合は、ディスプレイリンクにrefreshView:またはそれらの線に沿った何かと呼ばれる1つのメソッドを起動させます。次に、このメソッドでカスタムロジックを実行して、ストロボを切り替えるタイミングかどうかを判断します。

于 2013-02-21T20:30:01.737 に答える