CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务.

区分隐式动画和隐式事务:隐式动画通过隐式事务实现动画 。

区分显式动画和显式事务:显式动画有多种实现方式,显式事务是一种实现显式动画的方式。

1.隐式事务

除显式事务外,任何对于CALayer属性的修改,都是隐式事务.这样的事务会在run-loop中被提交.

- ( void)viewDidLoad {
     // 初始化一个layer,添加到主视图
    layer=[CALayer layer];
    layer.bounds = CGRectMake( 0,  0,  200,  200);
    layer.position = CGPointMake( 160,  250);
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.borderColor = [UIColor blackColor].CGColor;
    layer.opacity =  1.0f;
    [self.view.layer addSublayer:layer];    
    [super viewDidLoad];
}

-(IBAction)changeLayerProperty
{
     // 设置变化动画过程是否显示,默认为YES不显示
    [CATransaction setDisableActions:NO];
     // 设置圆角
    layer.cornerRadius = (layer.cornerRadius ==  0.0f) ?  30.0f :  0.0f;
     // 设置透明度
    layer.opacity = (layer.opacity ==  1.0f) ?  0.5f :  1.0f;

}

111

2. 显式事务

通过明确的调用begin,commit来提交动画

修改执行时间

[CATransaction begin];

//显式事务默认开启动画效果,kCFBooleanTrue关闭

[CATransaction setValue:(id)kCFBooleanFalse

forKey:kCATransactionDisableActions];

//动画执行时间

[CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration];

//[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]];

anotherLayer.cornerRadius = (anotherLayer.cornerRadius == 0.0f) ? 30.0f : 0.0f;

layer.opacity = (layer.opacity == 1.0f) ? 0.5f : 1.0f;

[CATransaction commit];

    事务嵌套

[CATransaction begin];
     [CATransaction begin];
    [CATransaction setDisableActions:YES];
     layer.cornerRadius = (layer.cornerRadius == 0.0f) ? 30.0f : 0.0f;
    [CATransaction commit];
    //上面的动画并不会立即执行,需要等最外层的commit
    [NSThread sleepForTimeInterval:10];
    //显式事务默认开启动画效果,kCFBooleanTrue关闭
    [CATransaction setValue:(id)kCFBooleanFalse
                     forKey:kCATransactionDisableActions];
    //动画执行时间
    [CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration];
    //[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]];
    anotherLayer.cornerRadius = (anotherLayer.cornerRadius == 0.0f) ? 30.0f : 0.0f;

[CATransaction commit];

CATransaction相关推荐

  1. CoreAnimation —— CATransaction(隐式动画)

    2019独角兽企业重金招聘Python工程师标准>>> 当你改变`CALayer`的一个可做动画的属性,它并不能立刻在屏幕上体现出来.相反,它是从先前的值平滑过渡到新的值.这一切都是 ...

  2. [CATransaction flush] 作用详解

    众所周知,CATransaction 是核心动画类中的事务类,负责将图层树的修改作为原子更新到渲染树.其分为隐式事务和显式事务.我们平时所做的针对layer层的操作都是隐式事务, 如self.view ...

  3. 微信跳一跳高分辅助踩坑

    旧博文,搬到 csdn 原文:http://rebootcat.com/2018/01/08/wechat_jump_hack/ 最近挺火的微信跳一跳 最近新版微信的『跳一跳』小程序着实火了一把,也把 ...

  4. iOS开发系列--让你的应用“动”起来

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

  5. IOS 自定义相机, 使用 AVFoundation(附实现部分腾讯水印相机功能 demo)

    原文链接:http://www.jianshu.com/p/c64bf543f16a 这是一款使用 AVFoundation 自定义的相机,与系统原生相机有一样的外观但比系统的相机更好.更符合实际的开 ...

  6. iOS - 支持水平 / 垂直显示自动滚动的跑马灯控件 --- SKAutoScrollLabel 的使用和实现

    原文链接:http://www.jianshu.com/p/7221bc08f26a SKAutoScrollLabel 是一个同时支持水平 / 垂直两种类型的 "跑马灯" 效果的 ...

  7. 多个CALayer的联动

    在如何通过手势捕获CALayer基础上做了个示例,两个CALayer的联动,当拖动左侧的Layer的时候,右侧的Layer随动.因为右侧的动画没有关闭,有延迟,产生随动的效果.如果不想延迟,可参考拖动 ...

  8. iOS学习——核心动画之Layer基础

    iOS学习--核心动画之Layer基础 1.CALayer是什么? CALayer我们又称它叫做层.在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这 ...

  9. iOS:CALayer核心动画层

    CALayer:核心动画层 简介: Core Animation 是跨平台的,支持iOS环境和Mac OS X环境 学习核心动画之前,需要先理解CALayer,因为核心动画操作的对象不是UIView, ...

最新文章

  1. jquery 同一个页面处理多个ajax请求
  2. BZOJ3048: [Usaco2013 Jan]Cow Lineup
  3. 交换机网络嗅探方法之用ARP欺骗辅助嗅探
  4. POJ3585-Accumulation Degree【树形dp,二次扫描与换根法】
  5. facebook, twitter,QQ, google +1, linkedin, disqus,gigya 按钮Network (登录)
  6. comboBox绑定对象数组 c# 1614065159
  7. 怎么做装修预算?装修预算需要注意的三大事项
  8. 循环嵌套外小内大原则
  9. vsftpd虚拟用户与匿名用户配合使用
  10. 安装Veritas Backup Exec v20.3
  11. mysql触发器 实例_mysql触发器的三个例子
  12. 计算机化学的dft的意义,第四章 密度泛函理论(DFT) 4.1 引言 4.2 DFT的优点 4.3 Hohenberg-Kohn定理 4.4 能量泛函公式...
  13. GMP编译make check时出现FAIL t-scan
  14. Windows 10 企业版LTSCjihuo
  15. windows系统下更改itunes默认备份地址(小白实操)
  16. 浅谈贝叶斯和MCMC
  17. 博客平台遭虚假勒索攻击、新黑客组织称对以色列的攻击负责|11月16日全球网络安全热点
  18. 面试题:给定一个数组,数组中只包含0和1。请找到一个最长的子序列,其中0和1的数量是相同的
  19. ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求
  20. python repr

热门文章

  1. rn在java中什么意思_[React Native Android 安利系列]RN中使用js调用java代码
  2. 搭建注册中心Consul集群
  3. python软件下载安装教程,python下载安装教程
  4. 区块链司法白皮书重磅发布!
  5. EasyExcel设置特定单个单元格(颜色)样式
  6. Python scikit-learn 学习笔记—鸢尾花模型
  7. 【附源码】计算机毕业设计java音蕾心动设计与实现
  8. JavaScript基础案例+代码
  9. openstack基础之python WSGI,paste,Routes,webob
  10. PL/SQL删除锁表的进程