浅析CADisplayLink

  • 定时器有2种,一种是NSTimer,一种是CADisplayLink,今天笔者就看看CADisplayLink怎么去使用

  • 初始化界面效果图:

  • 主要代码:
// ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end


// ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

@end

// VCView.h
#import <UIKit/UIKit.h>

@interface VCView : UIView

@end

// VCView.m
#import "VCView.h"

@implementation VCView

- (void)awakeFromNib {

    // 添加定时器
    // [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(update) userInfo:nil repeats:YES];

    // 什么时候调用指定的方法?
    // 当下一次屏幕刷新时调用(屏幕每一秒刷新60)
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];

    // 想要让CADisplayLink工作, 必须得要添加到主运行循环当中.
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

    // setNeedsDisplay底层会调用drawRect,并不是立马调用的.只是设了一个调用的标志.
    // 等下一次屏幕刷新时才去调用drawRect
}

static int _snowY = 0;
- (void)update {
    NSLog(@"%s",__func__);
    _snowY += 10;
    if (_snowY > self.bounds.size.height) {
        _snowY = 0;
    }
    // 重绘
    [self setNeedsDisplay];
}


- (void)drawRect:(CGRect)rect {
    //加载图片
    UIImage *image = [UIImage imageNamed:@"雪花"];
    [image drawAtPoint:CGPointMake(0, _snowY)];
}


@end

  • 简单效果图:

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 157,663评论 24 688
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 7,118评论 4 39
  • 女人 女人是水做的,水做的女人有水一样的恬淡闲逸。 少女时水灵灵的俊美在于她年轻活泼的朝气和情纯天真的娇嗔。“清水...
    艳如骄阳阅读 153评论 2 1
  • 五个表达 1.well-rounded 原句:Mom said the only way I was going ...
    daimosun阅读 128评论 0 0
  • 2017-09-23
    陳年风流阅读 77评论 2 3