1.viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(makeSnow)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
link.frameInterval = 10;
self.view.backgroundColor = [UIColor blackColor];
}
2.makeSnow方法
- (void)makeSnow
{
// 初始化雪花
UIImageView *snow = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"雪花"]];
// 设置雪花的frame
// 设置初始尺寸
CGFloat r = arc4random_uniform(15)+ 5;
snow.bounds = CGRectMake(0, 0, r, r);
// 设置初始位置
int screenW = (int)[UIScreen mainScreen].bounds.size.width;
CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
CGFloat x = arc4random_uniform(screenW);
CGFloat y = - r * 0.5;
[snow setCenter:CGPointMake(x, y)];
[self.view addSubview:snow];
// 动画
[UIView animateWithDuration:6 animations:^{
// 旋转效果
[snow setTransform:CGAffineTransformRotate(snow.transform, M_PI)];
// 目标frame
[snow setCenter:CGPointMake(arc4random_uniform(screenW), screenH * 0.97 + arc4random_uniform(100))];
// 渐变
snow.alpha = 0.2;
} completion:^(BOOL finished) {
// 动画结束后,移除雪花
[snow removeFromSuperview];
}];
}
3.帧动画运用更为常见的是,运用了step(步长)去控制动画的频率
3.1声明静态变量
static long long steps;
3.2viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
self.view.backgroundColor = [UIColor blackColor];
}
3.3帧动画调用方法,经常以steps命名
- (void)step
{
steps ++;
// 动画执行频率:每秒执行 60/6 = 10次
if (steps % 6 == 0) {
[self makeSnow];
}
}