码迷,mamicode.com
首页 > 其他好文 > 详细

CADisplayLink是个什么鬼???

时间:2015-06-06 10:41:50      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

最近看开源代码老是看到CADisplayLink,这个通常用在需要不停绘制页面的情况下,既然是QuatzCore框架中的,那绘制什么的效率肯定应该比用Timer高了吧.... 

用法和NSTimer很像。

    CADisplayLink *dl = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeCallback:)];
    [dl addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    self.displayLink = dl;
    
    UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(20, 80, 200, 50)];
    lab.backgroundColor = [UIColor blueColor];
    [self.view addSubview:lab];
    lab.textColor = [UIColor redColor];
    
    lab.font = [UIFont systemFontOfSize:28];
    lab.text = [NSString stringWithFormat:@"倒计时%ds", i];
    _textLabel = lab;

下面是回调

- (void)timeCallback:(id)sender {
    
    int second = i--;
    NSString *str = [NSString stringWithFormat:@"倒计时%ds", second];
    [self.textLabel setText:str];
    
    CFTimeInterval time = self.displayLink.duration;
    NSLog(@"%f", time);                   // 0.01666666...
    
    NSLog(@"%ld", self.displayLink.frameInterval);
    int y = round(1.0/time);
    
    self.displayLink.frameInterval = y;   //  约等于60帧,其实就是60啦
    NSLog(@"%ld", self.displayLink.frameInterval);
    
}

当然不用的时候记得

- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;
或者
- (void)invalidate;
@property(readonly, nonatomic) CFTimeInterval timestamp;   // 当前时间
@property(readonly, nonatomic) CFTimeInterval duration;    // 每帧的间隔

  

测试结果是1/60 s调用一次callback。



CADisplayLink是个什么鬼???

标签:

原文地址:http://my.oschina.net/u/734027/blog/425599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!