iOS 帧动画运用之雪花动画


1.viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(makeSnow)];
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    link.frameInterval = 10;
    self.view.backgroundColor = [UIColor blackColor];
}

2.makeSnow方法

- (void)makeSnow
{
    // 初始化雪花
    UIImageView *snow = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"雪花"]];
    // 设置雪花的frame
    // 设置初始尺寸
    CGFloat r = arc4random_uniform(15)+ 5;
    snow.bounds = CGRectMake(0, 0, r, r);
    // 设置初始位置
    int screenW = (int)[UIScreen mainScreen].bounds.size.width;
    CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
    CGFloat x = arc4random_uniform(screenW);
    CGFloat y = - r * 0.5;
    [snow setCenter:CGPointMake(x, y)];
    [self.view addSubview:snow];
    
    // 动画
    [UIView animateWithDuration:6 animations:^{
        // 旋转效果
        [snow setTransform:CGAffineTransformRotate(snow.transform, M_PI)];
        // 目标frame
        [snow setCenter:CGPointMake(arc4random_uniform(screenW), screenH * 0.97 + arc4random_uniform(100))];
        // 渐变
        snow.alpha = 0.2;
    } completion:^(BOOL finished) {
        // 动画结束后,移除雪花
        [snow removeFromSuperview];
    }];
}

3.帧动画运用更为常见的是,运用了step(步长)去控制动画的频率

3.1声明静态变量

static long long steps;
3.2viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    self.view.backgroundColor = [UIColor blackColor];
}

3.3帧动画调用方法,经常以steps命名

- (void)step
{
    steps ++;
    // 动画执行频率:每秒执行 60/6 = 10次
    if (steps % 6 == 0) {
        [self makeSnow];
    }
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值