动画缓冲 - CAMediaTimingFunction

简介: 动画缓冲 - CAMediaTimingFunction

关于CAAnimation的懂画执行,我们见过的组多的都是以匀速运动的,而实际上,物体的运动速度并不是匀速的,要么一直加速,要么先加速后减速等等,为了实现这一缓冲的过程,需要设置CAAnimation的timingFunction属性,它是CAMediaTimingFunction的一个对象,如果要设置隐式动画的计时函数,就设置CATransaction的+setAnimationTimingFunction: 方法。


创建CAMediaTimingFunction最简单的方式是调用+timingFunctionWithName:的构造方法,它有以下几个值:

  kCAMediaTimingFunctionLinear//匀速的线性计时函数
  kCAMediaTimingFunctionEaseIn//缓慢加速,然后突然停止
  kCAMediaTimingFunctionEaseOut//全速开始,慢慢减速
  kCAMediaTimingFunctionEaseInEaseOut//慢慢加速再慢慢减速
  kCAMediaTimingFunctionDefault//也是慢慢加速再慢慢减速,但是它加速减速速度略慢

下面看下测试代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.colorLayer = [CALayer layer];
    self.colorLayer.frame = CGRectMake(0, 0, 100, 100);
    self.colorLayer.position = CGPointMake(self.view.bounds.size.width/2.0, self.view.bounds.size.height/2);
    self.colorLayer.backgroundColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:self.colorLayer];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //configure the transaction
    [CATransaction begin];
    [CATransaction setAnimationDuration:1.0];
    [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
    //set the position
    self.colorLayer.position = [[touches anyObject] locationInView:self.view]; //commit transaction
    [CATransaction commit];

在UIView中,前面有说过UIView的过度动画,它同样有以上特性,要想改变UIView的缓冲,只需要设置options的参数即可:

//跟上面的变量结尾部分相似,功能也是一样的,不再一一写出来了,请对照上面来看,唯一的不同就是没有现实默认值,为第一项
  UIViewAnimationOptionCurveEaseInOut// 默认值
  UIViewAnimationOptionCurveEaseIn
  UIViewAnimationOptionCurveEaseOut
  UIViewAnimationOptionCurveLinear

看测试代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    //create a red layer
    self.colorView = [[UIView alloc] init];
    self.colorView.bounds = CGRectMake(0, 0, 100, 100);
    self.colorView.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height/2);
    self.colorView.backgroundColor = [UIColor redColor];
    [self.view addSubview:self.colorView];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [UIView animateWithDuration:1.0 delay:0.0
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         //set the position
                         self.colorView.center = [[touches anyObject] locationInView:self.view];
                     }
                     completion:NULL];
}

这里只是简单的运用,想要学的更多,欢迎继续关注。

目录
相关文章
matlab:在FUNCTION处出现解析错误:使用的MATLAB语法可能无效。
matlab:在FUNCTION处出现解析错误:使用的MATLAB语法可能无效。
2949 0
matlab:在FUNCTION处出现解析错误:使用的MATLAB语法可能无效。
|
监控 Ubuntu 安全
Ubuntu开启FTP服务教程
在Ubuntu服务器上配置FTP服务是一个常见的需求,无论是用于文件分享、网站管理还是数据备份。FTP(文件传输协议)是一种用于在网络上传输文件的协议,它可以让用户通过身份验证下载或上传文件。本文将指导您如何在Ubuntu系统上安装和配置FTP服务器,以及如何管理用户权限来保证服务器的安全性。
1356 0
|
运维 网络协议 Java
运维常见问题汇总-tomcat篇
运维常见问题汇总-tomcat篇
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
|
Oracle 关系型数据库 MySQL
OceanBase实践入门:高可用原理和容灾方案
OceanBase的多副本(奇数)设计,以及使用Paxos协议同步事务日志,是OceanBase高可用能做到自动切换(RTO约20s)和不丢数据(RPO=0)的关键。OceanBase在这个设计上还衍生出很多特性:如负载均衡和异地多活等。
6013 0
|
数据采集 资源调度 JavaScript
Node.js 适合做什么项目?
【8月更文挑战第4天】Node.js 适合做什么项目?
589 5
|
9月前
|
JSON API 数据格式
淘系等商品评论Json数据格式参考,API接口测试
通过以上示例和说明,你可以了解淘系商品评论的JSON数据结构和如何使用相关API接口获取评论数据。在实际操作中,你需要参考具体的API接口文档和开放平台的相关说明进行配置和调用。
|
JSON API 数据处理
深度解析京东商品列表数据接口:功能、参数与实战技巧
京东商品列表数据接口让开发者通过HTTP请求获取京东商品详尽列表信息,包括ID、名称、价格等。接口支持参数化搜索(关键词、价格区间等),返回JSON格式数据,便于处理与分析。开发者需注册账号并创建应用以获取访问权限。应用场景涵盖市场调研、商品管理和营销策略制定等,有效提升数据驱动决策能力。
|
安全 Java
LinkedBlockingQueue 是线程安全的,为什么会有两个线程都take()到同一个对象了?
LinkedBlockingQueue 是线程安全的,为什么会有两个线程都take()到同一个对象了?
352 0
|
关系型数据库 MySQL 开发者
MySQL 字段约束 null, not null, default, auto_increment
前言:转载,觉得有用就发了一遍 在 MySQL 中,每个字段定义都包含附加约束或者修饰符,这些可以用来增加对所输入数据的约束。 今天我们就来看一下 MySQL 的字段约束: NULL 和 NOT NULL 修饰符、DEFAULT 修饰符,AUTO_INCREMENT 修饰符。
355 0