我正在参与「启航方案」

前言

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)

iOS - 浅谈Core Animation

动画(CAAnimation)

Core Animation 供给了多种类型的动画,包含根底动画(CABasicAnimation)、关键帧动画(CAKeyframeAnimation)和过渡动画(CATransition)等。你能够设置动画的特点、持续时刻、缓冲函数等,然后将动画添加到图层上,Core Animation 会自动处理动画的计算和渲染。

运用事务(CATransaction)包裹图层特点的修正,使图层的方位从当时方位移动到指定方位。经过设置动画的持续时刻来操控动画的时长。
CATransaction.begin()
CATransaction.setAnimationDuration(1.0)
layer.position = CGPoint(x: 200, y: 200)
CATransaction.commit()

iOS - 浅谈Core Animation

缓冲函数(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")

iOS - 浅谈Core Animation

图层改换

Core Animation 供给了图层的转换和改换操作,能够对图层进行平移、旋转、缩放等改换操作,以及应用透视作用等。这些操作能够经过设置图层的特点来完成,也能够运用动画来完成平滑过渡的作用

将图层按照 z 轴旋转 /4 弧度,完成了一个旋转作用。能够运用 CATransform3DMakeRotation 函数来创建图层的改换矩阵。
layer.transform = CATransform3DMakeRotation(CGFloat.pi / 4, 0, 0, 1)

iOS - 浅谈Core Animation

图层蒙版

经过运用图层的蒙版特点(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

iOS - 浅谈Core Animation

结尾

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。