根据图示创建动画,当点击菜单按钮时,需要显示左侧菜单栏

效果看起来就像一个3D动画。现在我们来实现这种效果。
打开工程中的ContainerViewController.swift,创建3D变换函数:

    func menuTransform(percent: CGFloat) -> CATransform3D {//percent表示菜单显示的百分比进度var identity = CATransform3DIdentityidentity.m34 = -1.0/1000//表示为-1.0 / [camera distance],透视效果,m34 = -1 / D,D越小,透视效果越明显,必须在有旋转效果的前提下,才会看到透视效果。}

对于camera distance,有一些参考:
0.1 … 500:非常接近,很多透视变形。
750 … 2,000:视角不错,内容清晰可见。
2000及以上:几乎没有透视变形。

添加代码到menuTransform:

        let remainingPercent = 1.0 - percentlet angle = remainingPercent * .pi * -0.5//计算角度

添加变换代码:

        let rotationTransform = CATransform3DRotate(identity, angle, 0.0, 1.0, 0.0)let translationTransform = CATransform3DMakeTranslation(menuWidth * percent, 0, 0)return CATransform3DConcat(rotationTransform, translationTransform)

为menu添加变换,当往右拖拽时显示菜单

 menuViewController.view.layer.transform = menuTransform(percent: percent)

运行效果

默认锚点的位置在layer的中间,我们需要将锚点的x坐标移动到最右边,才不会和内容视图有断层效果。在设置frame之前设置锚点:

    menuViewController.view.layer.anchorPoint.x = 1.0

这样看起来效果就很好了

因为app的背景色是黑色的,所以我们只需要在setMenu中设置menu的alpha值即可添加阴影效果。

menuViewController.view.alpha = CGFloat(max(0.2, percent))

仔细观察你会发现menu中的内容发生了失真:

Core Animation在你切换时不断重绘menu控制器中的所有内容,并在所有元素移动时重新计算所有元素的透视形变,这显然是不明智的。最好让Core Animation知道你不会在动画期间更改menu内容,这样它就只需要渲染menu一次,仅仅是旋转渲染和图像缓存。
在手势开始拖动的begin里面添加代码:

      menuViewController.view.layer.shouldRasterize = truemenuViewController.view.layer.rasterizationScale = UIScreen.main.scale

shouldRasterize:指示Core Animation将图层内容缓存为图像。然后设置rasterizationScale以匹配当前屏幕的scale值。
这就解决了Core Animation在动画期间重绘的问题。
为避免在使用应用程序时进行任何不必要的缓存,在动画完成后,你需要关闭光栅化。

 self.menuViewController.view.layer.shouldRasterize = false

现在你只是在动画期间激活了光栅化。运行效果:

iOS动画:3D动画(18)相关推荐

  1. 系统学习iOS动画之六:3D动画

    本文是我学习<iOS Animations by Tutorials> 笔记中的一篇. 文中详细代码都放在我的Github上 andyRon/LearniOSAnimations. 到目前 ...

  2. iOS高仿国美商城、仪表盘、卡片日记、快速拨号、换主题、3D 动画等源码

    iOS精选源码 高仿腾讯qq浏览器探索界面的 3D UI 动画AISphereView 仪表盘.指示器.温度计 react-native-diary 模仿卡片日记 ZZFLEX-界面构建从未如此简单 ...

  3. iOS高仿国美商城、仪表盘、卡片日记、快速拨号、换主题、3D 动画等源码 1

    iOS精选源码 高仿腾讯qq浏览器探索界面的 3D UI 动画AISphereView 仪表盘.指示器.温度计 react-native-diary 模仿卡片日记 ZZFLEX-界面构建从未如此简单 ...

  4. iOS 模拟轮胎滚动3D动画效果

    因为项目中需要实现跑车动画效果,于是希望采用静止的跑车图和转动的轮胎来实现跑车开动效果.首先轮胎的转动要考虑到3D环境中形状的变化,不应该是纯圆形的,而应该是椭圆形.有两种方法实现这样的效果, 一是通 ...

  5. 图灵奖公布!计算机图形学先驱 Hanrahan 和 Catmull 获奖,祝贺两位好莱坞 3D 动画大片技术元老...

    作者 | 学术君 来源 | 学术头条(ID:SciTouTiao) 封图 | 视觉中国 18日,ACM(国际计算机协会)宣布,授予 Patrick M. Hanrahan 和 Edwin E. Cat ...

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

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

  7. 8款帅酷的HTML5/CSS3 3D动画、图片、菜单应用

    今天要给大家分享8款帅酷的HTML5/CSS3应用,它们中包括很酷的HTML5 3D动画应用,也包括实用的CSS3图片.菜单.进度条等插件,一起来看看吧. 1.HTML5 Canvas火焰燃烧动画 如 ...

  8. blender使用_用Blender教青少年3D动画

    blender使用 汤姆·H aines是导演和共同创始人3Dami ,在英国的一个非营利性的教育计划,侧重于年龄分布在14岁到18岁教3D动画青少年. 这是一个为期7天的课程,学生可以制作自己的动画 ...

  9. iOS CAReplicatorLayer 简单动画

    代码地址如下: http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记 ...

最新文章

  1. 【Java】身份证号码验证
  2. Accurate self-correction of errors inlong reads using de Bruijn graphs LoRMA使用de Bruijn图对长read中的错误
  3. sqlserver之定位死锁(经验分享)
  4. TABCTL32.OCX 文件
  5. Linux 内核的文件 Cache 管理机制介绍
  6. 十三个代码注释的小技巧
  7. 单例嵌套 ios_嵌套类型的前5个用例
  8. Solution 7: 判断两链表是否相交
  9. LeetCode 1474. 删除链表 M 个节点之后的 N 个节点
  10. Qt工作笔记-对connect的第五个参数的研究
  11. laravel数据迁移问题
  12. 【nginx】nginx 简介 基本概念 介绍
  13. 今日恐慌与贪婪指数为93 贪婪程度有所缓解
  14. java常用设计模式及其使用场景
  15. 自己的电脑怎么测网速
  16. Pixhawk系列飞控状态通知
  17. Linux 大数据(hadoop)
  18. 优课在线 实境英语作业3Unit 11-15
  19. 水仙花数(所有自幂数)的实现详解-C语言
  20. AI在招聘领域的这些应用,你都知道几个?

热门文章

  1. 如何在Windows 10上控制多个显示器的功能
  2. 我是歌手黄绮珊(黄妈)彭佳慧,_bin910729_新浪博客
  3. 美版t430笔记本win8系统下装Ubuntu的一些尝试和遇到的问题
  4. t430服务器安装系统,Dell PowerEdge T430
  5. classes是什么意思怎么读_class是什么意思_class怎么读_class翻译_用法_发音_词组_同反义词_班-新东方在线英语词典...
  6. 刷题记录(NC235611 牛牛国的战争,NC23803 DongDong认亲戚,NC235622 叠积木)
  7. excel合并多个表格的快速操作
  8. OSChina 周一乱弹 —— 帅气的红薯为何迷倒了万千 OSCers ~~~
  9. C# 浅谈基于Wpf下的MVVM模式的设计思想
  10. LWIP 以太网先启动后插入网线无法入网的解决办法