利用高级动画来实现雪花的飘落

本文介绍如何在iOS应用中利用高级动画技术实现雪花飘落的效果。通过创建UIImageView对象,设置随机大小、位置,并结合Core Animation进行旋转和透明度变化,模拟真实世界的飘雪场景。代码中使用了NSTimer定时生成雪花,并通过UIView动画方法控制雪花的下落轨迹和消失过程。

#import "ViewController.h"

#define FPS 30

#define MAX_SIZE 10

#define MAX_DURATION 2

#define MAX_SETOFF 100

@interface ViewController ()

@property (assign,nonatomic)NSUInteger times;

@end


@implementation ViewController


-(void)viewWillAppear:(BOOL)animated{

    [superviewWillAppear:animated];

    [NSTimerscheduledTimerWithTimeInterval:1/FPStarget:selfselector:@selector(appear:)userInfo:nilrepeats:YES];

}

//每调用一次,生成一片雪花

-(void)appear:(NSTimer*)sender{

    //1.创建雪花对象,设置位置和大小,加入父视图

    UIImageView *snow=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"snow" ]];

   CGFloat size=arc4random()%MAX_SIZE +20;

    NSInteger viewWidth=self.view.bounds.size.width;

   NSInteger snowCenterX=arc4random()%viewWidth;

    snow.frame=CGRectMake(snowCenterX, -30, size, size);

    [self.viewaddSubview:snow];

    

    

   CGPoint center=snow.center;

    center.y+=500;

    center.x+=arc4random()%MAX_SETOFF-50;//雪花最终的位置

    CGAffineTransform transform=CGAffineTransformMakeRotation(M_PI*(arc4random()%10));//雪花下落过程随机旋转的角度

   CGFloat alpha=0;//雪花最后的透明度

    [UIViewanimateWithDuration:arc4random()%MAX_DURATION+5

                         delay:0

                       options:

                        UIViewAnimationCurveEaseIn|UIViewAnimationOptionShowHideTransitionViews

                    animations:^{

                         snow.transform=transform;

                         snow.center=center;

                     }

                    completion:^(BOOL finished) {//掉落动作结束后,添加新动作

                         [UIViewanimateWithDuration:1

                                              delay:0

                                            options:UIViewAnimationOptionCurveLinear//雪花匀速彼岸花

                                         animations:^{

                                              snow.alpha=alpha;//使雪花透明度为0

                                          }

                                         completion:^(BOOL finished) {

                                              [snowremoveFromSuperview];//从父视图中删除雪花

                                          }];

                     }];

}



@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值