原理:CADisplayLink是在每一帧绘制之前调用,并且可以获取时间戳。
- (void)viewDidLoad {
[super viewDidLoad];
_lastTimestamp = -1;
_frameCount = 0;
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(calFPS:)];
[link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}
//计算1S内帧数
-(void)calFPS:(CADisplayLink *)displayLink
{
if(_lastTimestamp == -1){
_lastTimestamp = displayLink.timestamp;
return;
}
_frameCount++;
NSTimeInterval interval = displayLink.timestamp - _lastTimestamp;
if(interval < 1){
return;
}
_lastTimestamp = displayLink.timestamp;
CGFloat fps = _frameCount / interval;
NSLog(@"%f", fps);
_frameCount = 0;
}