FlakeDown-1

两个定时器(下落和寻找。回收机制)。固定位置和大小。


//创建一个存放雪花的数组

{

NSMutableArray *_flakeArray;

}

- (void)viewDidLoad {

[super viewDidLoad];

//初始化数组

_flakeArray= [[NSMutableArray alloc] initWithCapacity:0];

//往数组中添加雪花视图

for(inti = 0; i < 20; i ++) {

UIImageView *flake = [[UIImageView alloc] initWithFrame:CGRectMake(-40, -0, 40, 40)];

//设置雪花的tag值标记,0表示在初始位置,1表示不在初始位置

flake.tag= 0;

//添加图片

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

//显示图片

[self.view addSubview:flake];

//把雪花视图放到数组里

[_flakeArray addObject:flake];

}

//输出数组,检验添加是否正确(图片名字是否正确,创建全局变量,创建数组)

//NSLog(@"%@",_flakeArray);

//找雪花的定时器

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

//找雪花逻辑:我们给每一个雪花进行标记0,用定时器调用方法找雪花,每一次找雪花都会遍历雪花数组,找到一个标记为0的雪花,把放到屏幕顶部,改变标记为1,结束寻找,如果从数组中取出的雪花标记为1,不进行操作,继续循环找下一个,直到找到一个标记为0的雪花,或者循环结束

//让所有标记为1的雪花下落

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

//雪花下落的逻辑:我们可以把初始位置看做一个回收站,回收站里的雪花的标记都为0,在屏幕上的雪花标记都为1,用遍历数组找到所有标记为1的雪花,改变其纵坐标使其下落,如果某一个雪花落到屏幕底部,那就回收这个雪花,把他的位置放回到回收站,然后改标记为0

}

//找雪花的方法

- (void)findFlake {

//从数组找雪花

//遍历数组:用for循环,把数组里面的元素全部取出

for(inti = 0 ; i <_flakeArray.count; i ++) {

//UIImageView *flake = [_flakeArray objectAtIndex:i];

UIImageView *flake =_flakeArray[i];

//从初始位置找到一个雪花,放到屏幕顶部

if(flake.tag== 0) {

//把这个雪花放到屏幕顶端

flake.frame=CGRectMake(arc4random()%281, -40, 40, 40);

//改变tag标记

flake.tag= 1;

//找到一个雪花之后跳出循环

break;

}

}

}

//雪花下落的方法

- (void)flakeDown {

//遍历数组

for(UIImageView *flake in _flakeArray) {

//找到所有tag值为1的雪花,使其下落

if(flake.tag== 1) {

int y = flake.frame.origin.y;

y ++;

//重新定义雪花的位置更新位置

flake.frame=CGRectMake(flake.frame.origin.x, y, 40, 40);

//边界底部:如果雪花落到屏幕底部,

if(y >= 480) {

//回收雪花

flake.frame=CGRectMake(-40, 0, 40,40);

flake.tag= 0;

}

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容