#####1.定時器一個是NSTimergit
#import "HYLSnowflake.h" static CGFloat snowY=0; @implementation HYLSnowflake #pragma mark -drawRect - (void)drawRect:(CGRect)rect { UIImage *image=[UIImage imageNamed:@"雪花"]; [image drawAtPoint:CGPointMake(0, snowY)]; } -(void)awakeFromNib{ [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timeChange) userInfo:nil repeats:YES]; } -(void) timeChange{ snowY+=10; if (snowY>self.bounds.size.height) { snowY=0; } [self setNeedsDisplay]; } @end
#####2.另外一個是CADisplayLinkgithub
@implementation HYLSnowflake #pragma mark -drawRect - (void)drawRect:(CGRect)rect { UIImage *image=[UIImage imageNamed:@"雪花"]; [image drawAtPoint:CGPointMake(0, snowY)]; } //-(void)awakeFromNib{ // [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timeChange) userInfo:nil repeats:YES]; // //} #pragma mark - awakeFromNib -(void) awakeFromNib{ //屏幕刷新時調用,屏幕通常一秒刷新60次 CADisplayLink *link=[CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)]; [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; } -(void) timeChange{ if (count==30) { snowY+=10; count=0; }else{ count++; } if (snowY>self.bounds.size.height) { snowY=0; } //注意:這個方法並不會立刻調用drawRect,其實這個方法只是給當前控件添加刷新的標記,等下一次屏幕刷新的時候纔會調用drawRect [self setNeedsDisplay]; } @end
#####4.效果圖片oop
#####5.源代碼地址.net