iOS定時器雪花效果

定時器雪花效果

#####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
  • NSTimer易出現卡頓狀況
  • 第二種不會,由於頻率與屏幕刷新時間相同,因此不會出現卡頓

#####4.效果圖片oop

  • 1.

#####5.源代碼地址.net

相關文章
相關標籤/搜索