我已经问了一个关于如何CADisplayLink
和drawRect
表现在这里的更一般的问题,但由于这个问题还没有任何答案,我想我会问一个更具体的问题:有没有人设法让应用程序以 60fps 的速度运行drawRect
需要约 10 毫秒才能执行的方法?
在我的应用程序中,我配置CADisplayLink
如下:
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
并且该update
方法只需调用setNeedsDisplay
我的自定义 UIView (以及检查跳过的帧):
- (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 这应该没问题。
有没有人做到这一点?我究竟做错了什么?