ここCADisplayLink
でどのようにdrawRect
動作するかについてより一般的な質問をしましたが、その質問にはまだ答えがないので、より具体的な質問をすることにしました。実行に約10msかかるメソッド?drawRect
私のアプリでは、次のCADisplayLink
ように構成します。
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
update
メソッドは、カスタム UIView を呼び出すだけです(setNeedsDisplay
スキップされたフレームをチェックするだけでなく):
- (void)update
{
static CFTimeInterval timestamp = 0;
// check for skipped frame
CFTimeInterval newTimestamp = displayLink.timestamp;
if ((newTimestamp - timestamp) > (displayLink.duration * (displayLink.frameInterval + 0.5)))
NSLog(@"Frame skipped!");
timestamp = newTimestamp;
[myView setNeedsDisplay];
}
drawRect
これは、4 ミリ秒または 5 ミリ秒以上かかるとすぐにフレームをスキップし始めます。私の目的では、最大で 10 ~ 11ms 程度必要ですが、1/60fps = 16.7ms で問題ないと考えました。
誰かがこれを達成しましたか?私は何を間違っていますか?