使用CADisplayLink(定時器)實現(xiàn)雪花(Quartz2D)

1、選擇CADisplayLink而不使用NSTimer?

  • 如果以后每隔一段時間需要重繪,一般不使用NSTimer,因為NSTimer刷新會有延時,使用CADisplayLink不會刷新的時候有延遲

2、代碼實現(xiàn):

  • 自定義視圖DrawView
// .h 文件
#import <UIKit/UIKit.h>

@interface DrawView : UIView

@end

// .m文件實現(xiàn)
#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 綁定一個標識,等待下次刷新的時候才會調(diào)用drawRect方法

- (nonnull instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        
        self.backgroundColor = [UIColor blackColor];
        
        // 定時器
        // 每次屏幕刷新的時候就會調(diào)用,屏幕一秒刷新60次
        CADisplayLink *link = [CADisplayLink displayLinkWithTarget:selfselector:@selector(setNeedsDisplay)];
        
        // 只要把定時器添加到主運行循環(huán)就能自動執(zhí)行
        [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
        
        // setNeedsDisplay:底層并不會馬上調(diào)用drawRect,只會給當前的控件綁定一個刷新的標識,每次屏幕刷新的時候,就會把綁定了刷新(重繪)標識的控件重新刷新(繪制)一次,就會調(diào)用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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)載自:http://www.cocoachina.com/ios/20150106/10839.html 為...
    idiot_lin閱讀 412評論 0 1
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,198評論 4 61
  • 時過境遷,物是人非 七年后相遇 該用什么樣的面容去迎接 夕陽拉長你的身影 似乎想牽幾米外的手 伸出手去牽,牽你影子...
    簡兮5165878閱讀 212評論 0 0
  • 阿水剛剛失戀,整個人相似被打碎了一般,開始了一場重塑的旅程。剛剛從臺灣探親回來的他打算找好友阿山出來聊一下。 水:...
    山水社閱讀 329評論 0 0
  • 突然,有一天,我長大了,我發(fā)現(xiàn),鏡子里的人,不是我,雖然是真真正正從鏡子里映射出來的。表情慌張失措,麻木無神,就...
    穆染閱讀 427評論 0 0