使用UIView动画完成一个下雪动画
来源:互联网 发布:windows查看端口mac 编辑:程序博客网 时间:2024/05/16 07:44
使用UIView动画完成一个下雪动画
UIView动画是UIKit提供专门制作动画的API,其本质是对CoreAnimation的封装,使用UIView可以轻松方便的实现动画,不需要经过任何计算,本案例使用UIView制作一个下雪的动画,如图-2所示:
图-2
首先在创建好的Xcode项目中,将Storyboard中场景背景设置为黑色,在TRViewController类中定义一个NSInteger类型的私有属性count,由于给雪花计数。
其次在viewDidLoad方法中创建一个用于生成雪花的计时器,每隔1/30秒调用一次生成雪花的方法animate:。
然后实现animate:方法,在该方法中首先创建一个UIImageView类型的对象snow,将image属性设置为雪花图片,snow的大小随机生成。由于在其他方法中还会用到snow对象,所以将snow的tag值设置为属性count,每次调用animate:方法即每次生成一个snow对象,count都做自加操作,用于给雪花计数。
再在animate:方法中使用UIView的动画,给snow添加UIViewAnimationOptionCurveEaseIn类型的动画效果,使snow可以飞舞起来。
最后snow落到地面后,使用UIView的动画方法给snow对象添加融化消失的动画,并将snow对象从界面移除。
实现此案例需要按照如下步骤进行。
步骤一:创建添加雪花的计时器
首先在创建好的Xcode项目中,将Storyboard中场景背景设置为黑色,在TRViewController类中定义一个NSInteger类型的私有属性count,由于给雪花计数,代码如下所示:
- @interface TRViewController ()
- @property (nonatomic) NSInteger count;//计数雪片的数量
- @end
其次在viewDidLoad方法中创建一个用于生成雪花的计时器,每隔1/30秒调用一次生成雪花的方法animate:,代码如下所示:
- #define FPS 30.0
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- //创建生成雪花的计时器
- [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(animate:) userInfo:nil repeats:YES];
- }
步骤二:使用UIView的动画方法给雪花添加动画
首先实现animate:方法,在该方法中首先创建一个UIImageView类型的对象snow,将image属性设置为雪花图片,snow的大小随机生成。由于在其他方法中还会用到snow对象,所以将snow的tag值设置为属性count,每次调用animate:方法即每次生成一个snow对象,count都做自加操作用于给雪花计数,代码如下所示:
- #define MAX_SIZE 10
- - (void)animate:(NSTimer *)timer
- {
- //创建一片雪花
- UIImageView *snow = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"snow.png"]];
- int viewWidth = self.view.bounds.size.width;
- //雪花的大小随机生成
- CGFloat size = arc4random() % MAX_SIZE + MAX_SIZE;
- snow.frame = CGRectMake(arc4random() % viewWidth, -20, size, size);
- [self.view addSubview:snow];
- self.count++;
- snow.tag = self.count;
- }
最后实现方法snowDisppearAnimate:,该方法中snow落到地面后,使用UIView的动画方法给snow对象添加融化消失的动画,并将snow对象从界面移除,代码如下所示:
- #define DISPPEAR_DURATION 2
- //雪花落地动画结束后调用的方法,化雪动画
- - (void)snowDisppearAnimate:(NSInteger)snowTag
- {
- UIImageView *snow = (UIImageView *)[self.view viewWithTag:snowTag];
- [UIView animateWithDuration:arc4random() % DISPPEAR_DURATION + 2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
- snow.alpha = 0.0;
- } completion:^(BOOL finished) {
- [self removeSnow:snowTag];
- }];
- }
- - (void)removeSnow:(NSInteger)snowTag
- {
- UIImageView *snow = (UIImageView *)[self.view viewWithTag:snowTag];
- [snow removeFromSuperview];
- }
- 使用UIView动画完成一个下雪动画
- uiview动画使用案例
- UIView的一个弹出动画
- 下雪的动画模拟
- Android 下雪动画
- 动画 UIView animateWithDuration 使用详解
- 动画 UIView animateWithDuration 使用详解
- iOS- 动画UIView animateWithDuration 使用
- UIView动画
- UIView 动画
- UIView动画
- uiview动画
- UIView动画
- UIView 动画
- UIView动画
- 动画 UIView
- UIView动画
- UIView动画
- css中脱离文档流的理解
- iOS NSUserDefaults
- 结构型模式之桥接模式
- lamp服务器搭建问题
- 第五周 习题
- 使用UIView动画完成一个下雪动画
- 迭代式完美
- C语音 变量与内存
- VS2008非托管c++访问webservice服务
- 重学C++ (二) 数组和指针
- java中使用队列:java.util.Queue (转)
- 通过一个例子来解释startService和bindService的区别
- php居中裁剪图片
- Use multiple CPU Cores with your Linux commands — awk, sed, bzip2, grep, wc, etc.