XMG CADisplayLink

1.

在绘图的时候使用CADisplayLink

因为用CADisplayLink创建的定时器,在每次屏幕刷新的时候会调用

而setNeedDisplay也是不会立即去绘图,只是相当于做了一个标记。等待下一次刷新的时候才会调用


这样的话,两者的刷新时间就一致了。


源代码如下


#import "DrawView.h"



static CGFloat _snowY = 0;

@implementation DrawView



// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

    

    

    // 如果以后想绘制东西到view上面,必须在drawRect方法里面,不管有没有手动获取到上下文

 

    // 修改雪花y

    UIImage *image =  [UIImage imageNamed:@"雪花"];

    

    [image drawAtPoint:CGPointMake(50, _snowY)];

    

    _snowY += 10;

    

    if (_snowY > rect.size.height) {

        _snowY = 0;

    }


}


// 如果在绘图的时候需要用到定时器,通常


// NSTimer很少用于绘图,因为调度优先级比较低,并不会准时调用

- (void)awakeFromNib

{

    // 创建定时器

//    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)];

    

    // 添加主运行循环

    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

}


// CADisplayLink:每次屏幕刷新的时候就会调用,屏幕一般一秒刷新60


// 1 2

static int count = 0;

- (void)timeChange

{

//    count++;

//    if (count % 30) {// 一秒钟调用2

//        

//    }

    

    

    // 注意:这个方法并不会马上调用drawRect,其实这个方法只是给当前控件添加刷新的标记,等下一次屏幕刷新的时候才会调用drawRect

    [self setNeedsDisplay];

    


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值