iOS开发中动画的各种类型及方法总结

1.UIImage Animation图片动画

#define FPS 30.0
- (void)viewDidLoad
{
    [super viewDidLoad];
    UIImage *image = [UIImage animatedImageNamed:
@"ship-anim" duration:5*1/FPS];
    self.imageView.image = image;
}


2.NSTimer 计时器实现动画的方式

 2.1基本方法:

#define FPS 30.0
- (void)viewDidLoad
{
   [super viewDidLoad];
   self.count = 0;
   self.imageView.alpha = 0;
   //使用1/FPS计算出每一帧花费多长时间
   [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(changeAlpha:) userInfo:nil repeats:YES];
}
-(void)changeAlpha:(NSTimer *)timer{
   self.count++;
   //计算出每一帧需要修改的alpha值
   self.imageView.alpha+=1/(FPS*5);
   //根据完成动画的所有帧数决定
   //停止计时器
   if(self.count==FPS*5){
   [timer invalidate];
   NSLog(@".....");
    }
}

 2.2NStimer Animation 飞机飞行

#define FPS 30.0// 帧率
#define DURATION 2.0 // 动画时长
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.startCenter = self.imageView.center;
    self.count = 0;
}
- (IBAction)start:(UIButton *)sender {
    [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(move:) userInfo:nil repeats:YES];
}
//每一帧都来执行move方法,修改图片的中心点
//匀速动画:当前值 = 开始值+当前帧数*(结束值-开始值)/(帧率*动画时长)
-(void)move:(NSTimer *)timer{
    self.count++;
    CGPoint center = self.imageView.center;
    center.y = self.startCenter.y + self.count*(70-self.startCenter.y)/(FPS*DURATION);
    self.imageView.center = center;
    if(self.count >= FPS*DURATION){
        [timer invalidate];
    }
}

2.3变速公式

- (IBAction)start:(id)sender {
    [NSTimer scheduledTimerWithTimeInterval:1/FPS target:self selector:@selector(move:) userInfo:nil repeats:YES];
}
//变速公式:
//当前值= 上一次的值+(目标值-上一次的值)*渐进因子
-(void)move:(NSTimer *)timer{
    CGPoint center = self.imageView.center;
    center.y = center.y+(70-center.y)*0.08;
    self.imageView.center = center;
    if(center.y<=70){
        [timer invalidate];
    }
}

3.UIView Aniamtion

 3.1基本方法

- (IBAction)start:(id)sender {
    CGPoint center = self.imageView.center;
    center.y = 70;
    [UIView animateWithDuration:3 animations:^{
        //此处只要设定要被添加动画的视图 动画结束时的状态是什么
        self.imageView.center  = center;
    }];
}

 3.2其他方法

- (void)viewDidLoad
{
    [super viewDidLoad];
    //先记录此刻摆放的位置,作为
    //动画结束时的位置
    CGRect labelEndFrame = self.label.frame;
    CGRect imageViewEndFrame = self.imageView.frame;
    //设置动画前label的起始位置
    CGRect labelStartFrame = labelEndFrame;
    labelStartFrame.origin.x = -labelStartFrame.size.width;
    self.label.frame = labelStartFrame;
    CGRect imageViewStartFrame = imageViewEndFrame;
    imageViewStartFrame.origin.y = self.view.bounds.size.height;
    self.imageView.frame = imageViewStartFrame;
    //添加动画
    [UIView animateWithDuration:2 animations:^{
        //设置两个需要做动画的视图的结束位置
        self.label.frame = labelEndFrame;
        self.imageView.frame = imageViewEndFrame;
    }];
}
- (IBAction)move:(id)sender {
    CGPoint center = self.imageView.center;
    center.y -= 300;
    CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI);
    [UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionCurveEaseIn|UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
        self.imageView.center = center;
        self.imageView.transform = transform;
    } completion:nil];
}





转载于:https://my.oschina.net/iOSBoyJack/blog/509355

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值