博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 动画七:Layer Animations
阅读量:6262 次
发布时间:2019-06-22

本文共 2056 字,大约阅读时间需要 6 分钟。

layers 比 views 有更多的 animatable properties,layers 动画更灵活。

对 layers 的 position, size, or transform 进行动画处理同样会影响该层中的子视图,就像您直接对视图本身进行动画一样。

  • bounds: 修改它使层的边框具有动画效果。
  • position: 修改它使层在其父层中的位置具有动画效果。如果你只想一个轴进行动画,你可以分别设置 position.x or position.y。
  • transform: 修改它使层 move, scale, and rotate 。你甚至可以在三维空间中对层进行动画处理,这是单凭视图是无法做到的。

我们可以很容易地动画 layer 的边界,以改变它的颜色,宽度和角的半径:

• borderColor: 修改它改变 border 颜色。 • borderWidth: 修改它以伸缩 border width。 • cornerRadius: 修改它改变 laye 的角半径。

Shadow

• shadowOffset: 修改它,使 shadow 接近或者远离 layer。 • shadowOpacity: : 修改它,使 shadow 淡入淡出。 • shadowPath: 修改它以改变 layer 的 shadow,我们可以创建 3D 特效让图层看起来像漂浮在不同的阴影形状和位置上。 • shadowRadius: 修改这个以控制阴影的模糊。

Contents

Contents

• contents: 修改它,将原始 TIFF 或 PNG 数据分配为 层内容。 • mask: 修改它,建立形状或图像以用于屏蔽层的可见内容。 • opacity: 修改它改变图层内容的透明度。

以上所列只是我们可以动画的部分属性列表; CALayer的子类还有很多其它属性可以进行动画处理。

demo 实例

view 方式动画

UIView.animate(withDuration: 0.5) {    self.heading.center.x += self.view.bounds.width}复制代码

可以 layer 方式实现

let flyRight = CABasicAnimation(keyPath: "position.x") flyRight.fromValue = -view.bounds.size.width/2 flyRight.toValue = view.bounds.size.width/2flyRight.duration = 0.5heading.layer.add(flyRight, forKey: nil)复制代码

add(_:forKey:) 拷贝一个动画对象,并告诉 Core animation 在图层上运行它。参数 key 允许您稍后识别动画。

More elaborate layer animations
let flyRight = CABasicAnimation(keyPath: "position.x")    flyRight.fromValue = -view.bounds.size.width/2    flyRight.toValue = view.bounds.size.width/2    flyRight.duration = 0.5    flyRight.fillMode = kCAFillModeBoth    flyRight.isRemovedOnCompletion = false    heading.layer.add(flyRight, forKey: nil)复制代码

fillMode 的作用是决定当前对象过了非 active 时间段的行为. 比如动画开始之前,动画结束之后。

  • kCAFillModeRemoved 这个是默认值,动画开始前和动画结束后 , 动画对 layer 都没有影响,动画结束后 , layer 会恢复到之前的状态。

  • kCAFillModeForwards 当动画结束后, layer 会一直保持着动画最后的状态。

  • kCAFillModeBackwards 这个和 kCAFillModeForwards 是相对的,就是在动画开始前,你只要将动画加入了一个 layer , layer 便立即进入动画的初始状态并等待动画开始。

  • kCAFillModeBoth 理解了上面两个,这个就很好理解了,这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态。该属性使动画的第一帧(first frame)立即显示在屏幕上,并使动画的最后一帧(the final frame)在动画结束后也显示在屏幕上。

转载于:https://juejin.im/post/5c3d8066e51d45522c3018bb

你可能感兴趣的文章
雏形已具?2018年物联网智能市场研究报告
查看>>
陕西破获特大捕杀濒危野生动物案 设置“高压线”电杀猎物
查看>>
“办事不求人”破天荒写入黑龙江省政府工作报告
查看>>
Python文件操作的20个面试题,帮你打开公司大门,值得收藏
查看>>
2018年将是区块链商用化元年
查看>>
自然语言处理时,通常的文本清理流程是什么?
查看>>
最靠谱的《数据分析师》成长指南!真实数据库、2年销售数据、50h的训练学习……...
查看>>
可能是最好的正则表达式的教程笔记了吧...
查看>>
实战react技术栈+express前后端博客项目(5)-- 前后端实现登录功能
查看>>
MySQL 前缀索引——让索引减负狂奔
查看>>
程序开发者,为什么要和聪明人一起工作?
查看>>
chrome使用技巧(看了定不让你失望)
查看>>
LSAnimator - 易于读写的多链式动画框架
查看>>
有赞透明多级缓存解决方案(TMC)
查看>>
Kotlin:娶妻当娶贤,嫁夫则嫁能
查看>>
设计模式初探之建造者模式(Builder)
查看>>
菜鸟学网络之 —— 长连接和短连接
查看>>
DDFE 技术周刊(第十八期)2017.3.14
查看>>
安得广厦千万间,大赚天下寒士俱欢颜
查看>>
这是一份优美的信息图,吴恩达点赞的deeplearning.ai课程总结
查看>>