iOS动画之大雪纷飞
来源:互联网 发布:剪切合并音乐软件 编辑:程序博客网 时间:2024/04/29 05:18
1.结果展示
美丽的雪花,勾起了多少骚年美好的回忆。^_^
2.制作思路
其实创作这样一个大学纷飞的场景是十分简单的,简单到你看了教程之后想不会都不行。OK,下面国际惯例,讲解一下思路吧。
1.创建一个数组用来保存大量的雪花
_imagesArray = [[NSMutableArray alloc] init]; for (int i = 0; i < 1000; ++ i) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"snow"]]; float x = IMAGE_WIDTH; imageView.frame = CGRectMake(IMAGE_X, -30, x, x); imageView.alpha = IMAGE_ALPHA; [self.view addSubview:imageView]; [_imagesArray addObject:imageView]; }
2.使用时钟(CADisplayLink)来控制下雪,为什么不使用NSTimer呢。其实是可以的,只是(CADisplayLink)刷帧更快一些。
//创建时钟,并且添加到主循环中 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(makeSnow)]; [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
3.下雪,就是把数组当做队列来使用。
- 每次从数组头部取出一个雪花并且删除其在数组中的占位。
- 让雪花飘落,通过UIView动画完成frame,transform等改变。
- 当动画完成之后,将取出的雪花再次放进数组的尾部
- (void)makeSnow{ if (_imagesArray.count > 0) { UIImageView *imageView = _imagesArray[0]; [_imagesArray removeObjectAtIndex:0]; [self snowFall:imageView]; }}- (void)snowFall:(UIImageView *)imageView{ [UIView animateWithDuration:10 animations:^{ imageView.frame = CGRectMake(imageView.frame.origin.x, Main_Screen_Height, imageView.frame.size.width, imageView.frame.size.height); imageView.transform = CGAffineTransformMakeScale(0.3, 0.3); imageView.transform = CGAffineTransformRotate(imageView.transform, M_PI); } completion:^(BOOL finished) { float x = IMAGE_WIDTH; imageView.frame = CGRectMake(IMAGE_X, -30, x, x); [_imagesArray addObject:imageView]; }];}
3.有代码有真相
#define IMAGE_X arc4random()%(int)Main_Screen_Width#define IMAGE_ALPHA ((float)(arc4random()%10))/10#define IMAGE_WIDTH arc4random()%20 + 10#define PLUS_HEIGHT Main_Screen_Height/25#define Main_Screen_Height [[UIScreen mainScreen] bounds].size.height#define Main_Screen_Width [[UIScreen mainScreen] bounds].size.width#import "ViewController.h"@interface ViewController ()@property (nonatomic ,strong) NSMutableArray *imagesArray;@property (nonatomic , strong) UIImageView *imageView;@end@implementation ViewController- (void)loadView{ UIImageView *imageView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds]; imageView.image = [UIImage imageNamed:@"backgound.jpg"]; imageView.contentMode = UIViewContentModeScaleAspectFill; self.view = imageView;}- (void)viewDidLoad{ [super viewDidLoad]; _imagesArray = [[NSMutableArray alloc] init]; for (int i = 0; i < 1000; ++ i) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"snow"]]; float x = IMAGE_WIDTH; imageView.frame = CGRectMake(IMAGE_X, -30, x, x); imageView.alpha = IMAGE_ALPHA; [self.view addSubview:imageView]; [_imagesArray addObject:imageView]; } //创建时钟,并且添加到主循环中 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(makeSnow)]; [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];}- (void)makeSnow{ if (_imagesArray.count > 0) { UIImageView *imageView = _imagesArray[0]; [_imagesArray removeObjectAtIndex:0]; [self snowFall:imageView]; }}- (void)snowFall:(UIImageView *)imageView{ [UIView animateWithDuration:10 animations:^{ imageView.frame = CGRectMake(imageView.frame.origin.x, Main_Screen_Height, imageView.frame.size.width, imageView.frame.size.height); imageView.transform = CGAffineTransformMakeScale(0.3, 0.3); imageView.transform = CGAffineTransformRotate(imageView.transform, M_PI); } completion:^(BOOL finished) { float x = IMAGE_WIDTH; imageView.frame = CGRectMake(IMAGE_X, -30, x, x); [_imagesArray addObject:imageView]; }];}
4.Demo也不能少
https://github.com/Esdeath/snow/tree/master/SnowFlyTwo
1 0
- iOS动画之大雪纷飞
- Swift版本之大雪纷飞
- 大雪纷飞
- iOS 动画之CALayer动画
- IOS之动画效果
- IOS之动画
- IOS之制作动画
- IOS之动画
- IOS之常用动画
- IOS之动画
- IOS 之 动画 知识
- IOS之动画
- IOS之动画
- iOS之Transition动画
- iOS 之连续动画
- IOS之动画
- iOS之View动画
- iOS动画之CALayer
- windows7环境下theano安装
- BC一周年A
- poj 3648 Wedding 【2-sat 经典建图 输出一组可行解 好题】 【tarjan求SCC + 缩点 + 拓扑排序 + 染色】
- C++学习,总结一
- laravel实用笔记
- iOS动画之大雪纷飞
- HDU 2178 猜数字(二分)
- FS_S5PC100平台上Linux Camera驱动开发详解(一)
- 图形设计
- linux性能分析命令-扫盲贴
- linux程序设计——多客户(第十五章)
- Java面试题汇总
- iOS开发中 Mac OS X 及Xcode 常用快捷键
- Leetcode #59 Spiral Matrix II