iOS定时器雪花效果

定时器雪花效果

#####1.定时器一个是NSTimer

#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.另一个是CADisplayLink

@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.效果图片

  • 1.

#####5.源代码地址

转载于:https://my.oschina.net/HYLApple/blog/701247

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值