使用定时器制作雪花动画

 1 #import "HUAppDelegate.h"
 2
 3 @implementation HUAppDelegate
 4
 5 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 6 {
 7     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 8     // Override point for customization after application launch.
 9     self.window.backgroundColor = [UIColor colorWithRed:0 green:0.7 blue:1 alpha:0.7];
10     [self.window makeKeyAndVisible];
11
12
13     //创建数组,盛放雪花
14     _snowArray = [[NSMutableArray alloc] init];
15     for (int i=0; i < 30; i++)
16     {
17         UIImageView *snow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"flake.png"]];
18         snow.frame = CGRectMake(arc4random() % 320, -20, 20, 20);
19         [_snowArray addObject:snow];
20         [self.window addSubview:snow];
21
22     }
23     //这个定时器使用来寻找可以进行下落的雪花
24     [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(findSnow) userInfo:nil repeats:YES];
25
26     //这个定时器是将找到的雪花下落
27     [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(snowDown) userInfo:nil repeats:YES];
28
29     return YES;
30 }
31
32 - (void)findSnow
33 {
34     for (int i = 0; i < _snowArray.count; i++)
35     {
36         UIImageView *imageView = [_snowArray objectAtIndex:i];
37         if (imageView.tag == 0)  //使用 tag 值来标识雪花是否可以进行下落,0 表示可以,1表示不可以
38         {
39             imageView.tag = 1;  //tag 为 1 表示希望雪花进行下落
40             break;
41         }
42     }
43 }
44 - (void)snowDown
45 {
46     for (int i = 0; i < _snowArray.count; i ++)
47     {
48         UIImageView *imageView = [_snowArray objectAtIndex:i];
49         if (imageView.tag == 1)   //tag 为1表示这多雪花需要进行下落的动作
50         {
51             CGRect rect = imageView.frame;
52             rect.origin.y += 1;  //通过改变纵坐标的值模拟动画,注意 OC 不允许深度赋值
53             imageView.frame = rect;
54             if (rect.origin.y > 480)
55             {
56                 rect.origin.x = arc4random() % 320;
57                 rect.origin.y = -20;  //让已经下落到底部的雪花回到顶部,重新下落
58                 imageView.frame = rect;
59                 [_snowArray replaceObjectAtIndex:i withObject:imageView]; //这里是让已经下落到底部的雪花在重新利用,即循环下落,造成雪花无穷无尽的效果,尽管数组里只存储了 30 多雪花.观察这里发现,寻找雪花的定时器在进行了 30 次查找后发现,已经在也找不到一朵 tag 值为 0 的雪花了,此时最好是将这个定时器给销毁,否则它会一直重复寻找下去,消耗内存资源。另外一种方法是将已经下落到底部的雪花的 tag 值在重置为 0,但这种解法显然是没有前一种好的。
60             }
61         }
62     }
63 }
64
65 @end

这种方法的好处是雪花的个数是可以控制的,并且通过方法达到无穷无尽(即重用)的效果,不需要像 UIView 动画那样没次都需要创建一个雪花的 UIImageView 对象, 这样可以节省内存,缺点是这样实现的动画效果比较僵硬,在这里值实现了雪花的纵向移动,并没有横向的效果。

可以对比前一篇雪花的动画效果,查看请戳这里

时间: 2024-10-17 19:56:49

使用定时器制作雪花动画的相关文章

定时器与 UIView 动画结合的雪花降落的效果

1 #import "HUAppDelegate.h" 2 3 @implementation HUAppDelegate 4 5 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 6 { 7 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScr

duilib制作窗体动画效果

转载请说明原出处,谢谢~·http://blog.csdn.net/zhuhongshu/article/details/49026605 最近一段时间没写博客了,感觉最近没有遇到什么必须解决的bug.在一年前我把自己写的仿酷狗音乐播放器Demo写到博客时,我在博客末尾写过以后会做异形窗体和窗体动画的功能.异形窗体在半年前大概做完并且集成到我的库里了,但是窗体动画Demo没有写到博客.之前就有网友问我窗体动画的制作方法,一直懒着没写,不好意思···. 今天把窗体动画的制作思路和Demo说明一下.

用svg制作loading动画

首先说明:由于各浏览器对svg动画事件支持不统一,此loading动画在Firefox,Opera,Chrome中均没有问题,IE和Safari中有问题,可能是不支持SIML写动画的语法, 但是用Canvas写的话,在颜色的渐变方面会有问题: 线性渐变需要传递四个参数 xstart:渐变开始点x坐标       ystart:渐变开始点y坐标       xEnd:渐变结束点x坐标       yEnd:渐变结束点y坐标 这样画出来的渐变只能用于矩形之类的图形,无法应用在诸如扇形内,此loadi

PPT制作线条动画

0.小叙闲言 今天在用PPT做动画的时候小有心得,百度了一下线条动画制作,有一个贴子里面的讨论,也给了我一些灵感,贴子地址:http://www.rapidbbs.cn/thread-24577-1-1.html.但是还是没有做下图这样的效果的动画,这是自己纯想出来的,分享一下,或许对大家有点帮助.文章中的PPT下载地址:http://files.cnblogs.com/files/endlesscoding/PPT_Line_Animations.zip 1.PPT简单线条动画 平时做线条动画

go制作gif动画

今天看了golang中国社区翻译的"go语言圣经",在第一章1.4节讲到用go制作gif动画,感觉非常有意思,分享给大家 package main import (     "image"     "image/color"     "image/gif"     "io"     "math"     "math/rand"     "os" )

iOS 雪花动画与跑马灯

这篇是接着上一篇, 关于动画效果的收集篇, 这篇介绍了跑马灯动画以及下落雪花动画, 请看, 话说最近怎么不在状态呢, 好伤感(囧~). 上一篇 - iOS 仿YY直播心形动画 & 烟花动画 跑马灯效果演示 这里贴出使用代码, 详细请下载Demo查看 下载即用~ 快餐 - -Star鼓励 下载后, 在VC中这样使用, 当然Demo中也有体现 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loa

3D Grid Effect – 使用 CSS3 制作网格动画效果

今天我们想与大家分享一个小的动画概念.这个梦幻般的效果是在马库斯·埃克特的原型应用程序里发现的??.实现的基本思路是对网格项目进行 3D 旋转,扩展成全屏,并呈现内容.我们试图模仿应用程序的行为,因此创建了两个演示,分别演示垂直和水平旋转网格项. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 您可能感兴趣的相关文章 创意无限!一组网页边栏过渡动画[附源码下载] 真是好东西!13种非常动感的页面加载动画效果 你见过吗?9款超炫的

Adobe edge animate制作HTML5动画可视化工具(一)

Edge Animate for mac是Adobe最新出品的制作HTML5动画的可视化工具,简单的可以理解为HTML5版本的Flash Pro.在之后的文章中,我会逐一的介绍这款新的HTML5动画神器.这篇文章先说一说如何把Edge Animate制作的HTML5动画作品嵌入到Wordpress中. Adobe Edge Animate的目的是帮助专业设计师制作网页动画乃至简单游戏.目前该工具的重点放在动画引擎上,将增加更多HTML5功能,比如Canvas.HTML5音频/视频标签等.支持An

分享一个纯css制作的动画化,在网页(手机)加载等的时候可以引用!

CSS代码如下: /* Custom Stylesheet */ body, html { margin: 0; -webkit-font-smoothing: antialiased; background: #68ABAD; text-align: center; } /* DEMO 1 */ .loader1 { margin: 0 auto; height: 20px; width: 20px; position:relative; -webkit-animation:spin 1.5s