我正在参与「启航方案」
前言
Core Animation 是苹果供给的一套动画结构,用于在 iOS 和 macOS 应用程序中创建动画作用。它依据图层(CALayer)的概念,能够对图层进行各种动画和转换操作,然后完成视图的平移、缩放、旋转、淡入淡出等作用。
简略聊一聊 Core Animation 的一些关键概念和特性:
图层(CALayer)
Core Animation 的中心是图层,它是一个可视化容器,能够用于出现视觉内容。每个视图(UIView)都有一个相关的图层,能够经过视图的 layer 特点来访问。
创建了一个 CALayer 对象,并将其添加到视图的图层上。能够设置图层的大小、方位、背景色等特点。
let layer = CALayer()
layer.frame = CGRect(x: 100, y: 200, width: 100, height: 100)
layer.backgroundColor = UIColor.red.cgColor
view.layer.addSublayer(layer)

动画(CAAnimation)
Core Animation 供给了多种类型的动画,包含根底动画(CABasicAnimation)、关键帧动画(CAKeyframeAnimation)和过渡动画(CATransition)等。你能够设置动画的特点、持续时刻、缓冲函数等,然后将动画添加到图层上,Core Animation 会自动处理动画的计算和渲染。
运用事务(CATransaction)包裹图层特点的修正,使图层的方位从当时方位移动到指定方位。经过设置动画的持续时刻来操控动画的时长。
CATransaction.begin()
CATransaction.setAnimationDuration(1.0)
layer.position = CGPoint(x: 200, y: 200)
CATransaction.commit()

缓冲函数(CAMediaTimingFunction)
缓冲函数用于定义动画的时刻改变曲线。Core Animation 供给了一些预定义的缓冲函数,如线性(linear)、加快(easeIn)、减速(easeOut)等,也能够经过自定义缓冲函数来完成更杂乱的动画作用
创建了一个根底动画,使图层的 x 轴方位从 0.0 移动到 200.0,并运用了缓冲函数(ease-in-ease-out)来定义动画的时刻改变曲线。
let animation = CABasicAnimation(keyPath: "position.x")
animation.fromValue = 0.0
animation.toValue = 200.0
animation.duration = 1.0
animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
layer.add(animation, forKey: "positionAnimation")

图层改换
Core Animation 供给了图层的转换和改换操作,能够对图层进行平移、旋转、缩放等改换操作,以及应用透视作用等。这些操作能够经过设置图层的特点来完成,也能够运用动画来完成平滑过渡的作用
将图层按照 z 轴旋转 /4 弧度,完成了一个旋转作用。能够运用 CATransform3DMakeRotation 函数来创建图层的改换矩阵。
layer.transform = CATransform3DMakeRotation(CGFloat.pi / 4, 0, 0, 1)

图层蒙版
经过运用图层的蒙版特点(mask)或遮罩特点(contentsMask),能够完成图层内容的裁剪或遮罩作用。蒙版和遮罩能够是一个图片、一个形状或其他图层,能够创建出各种有趣的视觉作用。
创建了一个 UIImageView,并将一张图片设置为其内容。然后,咱们创建了一个 CALayer 作为蒙版层,并将其设置为 UIImageView 的 mask 特点。经过设置 mask 特点,蒙版层会裁剪 UIImageView 的内容,然后完成蒙版作用。
let imageView = UIImageView(frame: CGRect(x: 100, y: 200, width: 100, height: 100))
imageView.image = UIImage(named: "风景.jpg")
view.addSubview(imageView)
let maskLayer = CALayer()
maskLayer.frame = imageView.bounds
maskLayer.contents = UIImage(named: "sicon2x")?.cgImage
imageView.layer.mask = maskLayer

结尾
上面只是Core Animation 的很小一部分特性,实际能够依据需求进行进一步探究和运用。