使用CADisplayLink(定时器)实现雪花(Quartz2D)

1、选择CADisplayLink而不使用NSTimer?

  • 如果以后每隔一段时间需要重绘,一般不使用NSTimer,因为NSTimer刷新会有延时,使用CADisplayLink不会刷新的时候有延迟

2、代码实现:

  • 自定义视图DrawView
// .h 文件
#import <UIKit/UIKit.h>

@interface DrawView : UIView

@end

// .m文件实现
#import "DrawView.h"

@implementation DrawView

- (void)drawRect:(CGRect)rect {
    // Drawing code
    static CGFloat snowY = 0;
    UIImage *image = [UIImage imageNamed:@"雪花"];
    [image drawAtPoint:CGPointMake(0, snowY)];
    snowY += 10;
    if (snowY > rect.size.height) {
        snowY = 0;
    }
}

//setNeedsDisplay 绑定一个标识,等待下次刷新的时候才会调用drawRect方法

- (nonnull instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        
        self.backgroundColor = [UIColor blackColor];
        
        // 定时器
        // 每次屏幕刷新的时候就会调用,屏幕一秒刷新60次
        CADisplayLink *link = [CADisplayLink displayLinkWithTarget:selfselector:@selector(setNeedsDisplay)];
        
        // 只要把定时器添加到主运行循环就能自动执行
        [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
        
        // setNeedsDisplay:底层并不会马上调用drawRect,只会给当前的控件绑定一个刷新的标识,每次屏幕刷新的时候,就会把绑定了刷新(重绘)标识的控件重新刷新(绘制)一次,就会调用drawRect去重绘
        
        // 如果以后每隔一段时间需要重绘,一般不使用NSTimer,使用CADisplayLink,不会刷新的时候有延迟    }
      }
    return self;
}
@end
  • 2.使用DrawView
#import "ViewController.h"
#import "DrawView.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    DrawView *drawV = [[DrawView alloc] init];
    drawV.frame = self.view.frame;
    
    [self.view addSubview:drawV];
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文转载自:http://www.cocoachina.com/ios/20150106/10839.html 为...
    idiot_lin阅读 3,089评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,241评论 4 61
  • 时过境迁,物是人非 七年后相遇 该用什么样的面容去迎接 夕阳拉长你的身影 似乎想牵几米外的手 伸出手去牵,牵你影子...
    简兮5165878阅读 1,443评论 0 0
  • 阿水刚刚失恋,整个人相似被打碎了一般,开始了一场重塑的旅程。刚刚从台湾探亲回来的他打算找好友阿山出来聊一下。 水:...
    山水社阅读 2,682评论 0 0
  • 突然,有一天,我长大了,我发现,镜子里的人,不是我,虽然是真真正正从镜子里映射出来的。表情慌张失措,麻木无神,就...
    穆染阅读 3,106评论 0 0