您的(和我的)第一个带有核心动画的贝塞尔曲线
我很高兴学习Xcode中的动画。 这是我的背景,也是我的热情。 但是当我们学习UIView动画时,我非常失望。 这个过程感觉很笨拙,就像我无法在Maya或After Effects中所能控制的地方一样。
我决定学习Core Animation,这就是我要带您了解的内容。 这是一个用于bezier动画的非常简单的教程,只是让您不知所措。
什么是贝塞尔曲线?
让我们从这里开始。 在设计工作时要理解这是一个非常重要的概念。 Adobe Creative Suite会大量使用它们。 贝塞尔曲线简单且可扩展,非常适合矢量图像。 如果您使用过Illustrator或Photoshop,则可能已经看到过贝塞尔手柄:
贝塞尔曲线也是计算机动画的基础。 可以沿贝塞尔曲线移动对象。 速度图使用贝塞尔曲线手柄。 它们允许轻松控制动画流,同时仍保持事物的紧密和流畅。
但是,贝塞尔实际上是什么? 长的答案在于函数,但这不是您必须记住的东西。 我能找到的最好的视觉解释来自博客文章(如果您想深入研究贝塞尔曲线及其背后的微积分,则值得一读):
简短的答案以及您需要了解的所有内容是, 贝塞尔曲线是具有起点和终点的直线,在点之间平滑插值以创建曲线。
如何为Core Animation制作动画?
在探讨如何沿贝塞尔曲线进行动画处理之前,让我们研究一下Core Animation。 核心动画(用于与之关联的类,协议等的缩写CA)是一种基础结构,可用于为应用程序的视图和其他可视元素制作动画。
- 导入QuartzCore ,但是如果您已经包含在UIKit中 ,则不需要这样做,它是其中的一部分
- 设置要更改的视图。 我通过将变量声明为UIView并将其添加到主视图并设置其框架来以编程方式进行操作。 别忘了也给它加上背景色! 和我一起玩,变黑。
- 输入以下代码:
让changeColor = CABasicAnimation(keyPath:“ backgroundColor”)
changeColor.fromValue = backgroundView.backgroundColor
changeColor.toValue = UIColor.white.cgColor
changeColor.duration = 2
backgroundView.layer.add(changeColor,forKey:“ backgroundColor”)
这里发生了什么事?
- 首先,将一个变量声明为CABasicAnimation(keypath :)的实例
- 密钥路径不必是属性,以后也不必与密钥路径相同。 这只是一个标识符。 放任何东西。
- 然后给它一个from值(在这里我将其设置为它已经具有的值),然后给一个to值,在这里将其设置为白色。 确保它是CGColor,这是通过在UIColor初始化的末尾添加.cgColor来实现的。
- 给它一个持续时间(我决定2秒)
- 然后将动画添加到对象的layer 。 不是对象本身。
运行! 您应该看到视图从黑色逐渐消失为白色。 做得好! 现在,如果有人问您是否曾经使用过核心动画,您可以说“是的,这一次我读博客!”
如何创建贝塞尔曲线动画?
现在,我们了解了基础知识,让我们制作一个UIBezierCurve动画!
我首先在视图控制器中创建函数。 我在viewDidLoad()中调用了该函数,然后制作了一个名为sky的背景视图,该视图被限制为ViewController主视图的大小。 简单的东西。
因此,让我们开始创建一个通用的UIBezierCurve。
让路径= UIBezierPath()
然后让我们添加太阳的图像。 我在资产中的太阳图像被称为“太阳”。
让imageSunName =“ Sun”
让imageSun = UIImage(named:imageSunName)
让imageView = UIImageView(image:imageSun)
imageView.frame = CGRect(x:0,y:0,宽度:100,高度:100)
self.view.addSubview(imageView)
使用path.move(to 🙂设置曲线开始的CG点。 然后使用path.QuadCurve(to:controlPoint 🙂添加另外两个CG点。 to:将是端点, controlPoint:将是贝塞尔曲线将插值到的矩形的顶部。
path.move(至:CGPoint(x:sky.frame.maxX,y:sky.frame.maxY))
path.addQuadCurve(至CGPoint(x:0,y:sky.frame.maxY),controlPoint:CGPoint(x:sky.frame.maxX / 2,y:0))
然后,创建动画:
- 创建一个动画常量(我们需要使其成为CAKeyframeAnimation才能使用贝塞尔曲线路径。
- 将贝塞尔曲线设置为animation.path属性。
- 给它一个重复计数(如果需要)和持续时间
- 然后将动画添加到图层。
让动画= CAKeyframeAnimation(keyPath:“位置”)
animation.path = path.cgPath
animation.repeatCount = 0
animation.duration = 2.0
imageView.layer.add(animation,forKey:“沿路径动画”)
imageView.center = CGPoint(x:0,y:sky.frame.maxY)
快点! 看着你的太阳升起并落山!
现在,像我一样,掌握您的新知识并继续前进! 我希望以更高级的动画回到我的博客,以分享和增强我自己。