博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
❄️ 雪花降落
阅读量:6472 次
发布时间:2019-06-23

本文共 2429 字,大约阅读时间需要 8 分钟。

 

#define SNOWPOSITION (arc4random() % (int)self.view.frame.size.width)

#define SNOWWIDTH (arc4random() % 20 + 10)

 

 

@interface XLRightViewController ()

{

    NSMutableArray * snowArr;

}

@end

 

@implementation XLRightViewController

 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;

}

-(void)createUI

{

    UIImageView * imageView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];

    imageView.image = [UIImage imageNamed:@"3.jpg"];

    [self.view addSubview:imageView];

}

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    [self createUI];

    [self createSnowImageView];

}

-(void)createSnowImageView

{

    snowArr = [[NSMutableArray alloc]init];

    //创建20多雪花 循环利用

    for(int i = 0;i < 20;i++)

    {

        float snowWidth = SNOWWIDTH;

        UIImageView * snowImageView = [[UIImageView alloc]initWithFrame:CGRectMake(SNOWPOSITION, -30, snowWidth, snowWidth)];

        snowImageView.image = [UIImage imageNamed:@"snow.png"];

 

        //设置雪花的透明度

        snowImageView.alpha = (arc4random() % 10)/10.0;

    

        [self.view addSubview:snowImageView];

        

        //将雪花视图添加到数组中 循环利用

        [snowArr addObject:snowImageView];

    }

    

    [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(makeSnow) userInfo:nil repeats:YES];

}

-(void)makeSnow

{

    //为每朵雪花添加tag

    static int index = 0;

    if(snowArr.count > 0)

    {

        //获取数组中第一朵雪花

        UIImageView * imageView = (UIImageView *)snowArr[0];

        imageView.tag = ++index;

        

        //添加完tag值的这朵雪花 就可以下落了

        [self snowDown:imageView];

        

        //从数组中移除该雪花 等待重用

        [snowArr removeObject:imageView];

    }

}

-(void)snowDown:(UIImageView *)imageView

{

    //为协议中的方法传递参与动画的视图的tag

    [UIView beginAnimations:[NSString stringWithFormat:@"%d",imageView.tag] context:nil];

    

    //设置动画的持续时间

    [UIView setAnimationDuration:6];

    

    //设置当前视图控制器为UIView动画代理

    [UIView setAnimationDelegate:self];

    

    //设置雪花的降落位置及动画停止的方法

    imageView.frame = CGRectMake(imageView.frame.origin.x, self.view.frame.size.height, imageView.frame.size.width, imageView.frame.size.height);

    

    //动画停止的方法--------协议中的方法

    [UIView setAnimationDidStopSelector:@selector(snowStop:)];

    

    //开始动画

    [UIView commitAnimations];

}

-(void)snowStop:(NSString *)imageTag

{

    //获取重复利用的雪花

    UIImageView * imageView = (UIImageView *)[self.view viewWithTag:[imageTag integerValue]];

    

    float width = SNOWWIDTH;

    

    imageView.frame = CGRectMake(SNOWPOSITION, -30, width, width);

    

    //将雪花添加到数组中

    [snowArr addObject:imageView];

}

 

转载于:https://www.cnblogs.com/daxueshan/p/6137917.html

你可能感兴趣的文章
Vijos P1881 闪烁的星星
查看>>
ABP理论学习之领域服务
查看>>
Qt 控制watchdog app hacking
查看>>
让所有IE支持HTML5的解决方案
查看>>
RDD之五:Key-Value型Transformation算子
查看>>
Windows 搭建Hadoop 2.7.3开发环境
查看>>
python操作mysql数据库实现增删改查
查看>>
percona 5.7.11root初始密码设置
查看>>
Cognitive Security的异常检测技术
查看>>
Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
查看>>
生活杂事--度过十一中秋
查看>>
Pyrex也许是一个好东西
查看>>
Java内部类总结
查看>>
WINFORM WPF字体颜色相互转换
查看>>
能力不是仅靠原始积累(三)
查看>>
实战:使用终端服务网关访问终端服务
查看>>
彻底学会使用epoll(一)——ET模式实现分析
查看>>
路由器的密码恢复
查看>>
【Android 基础】Android中全屏或者取消标题栏
查看>>
Xilinx 常用模块汇总(verilog)【03】
查看>>