我正在使用CADisplayLink作爲頻閃計時器。一次運行多個CADisplayLinks?
我有2個CADisplayLinks:
的主要原因之一(這件事在此運行):
SMPTELink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onTick)];
SMPTELink.frameInterval = 1;
[SMPTELink addToRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
頻閃一個(頻閃當這隻運行時):
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.
一次運行兩個CADisplayLinks不好嗎?有時我的頻閃看起來並不像我認爲的那樣平滑。這裏是我的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;
}
}
想通過一種方法將它整合到一個CADisplayLink中 - 效果很棒! – objectiveccoder001 2013-02-22 05:09:08
從API角度來看,通過檢查其他人是否已經存在或不存在來增加複雜性是有意義的。 – hfossli 2013-12-09 19:15:15