Apple渲染图像、动画的CALayer
Apple渲染图像、动画的CALayer

Apple渲染图像、动画的CALayer

CALayer 是 macOS 和 iOS 系统中负责 图形渲染、动画和视觉效果的核心类之一,来自 Apple 的 Core Animation 框架(全称 Core Animation Layer)。它是构建现代 UI 的底层核心组件。

为什么需要CALayer?

在没有 CALayer 的世界中,所有绘制都需要手动使用 draw(),性能低、动画难。而有了 CALayer:

1、图形内容由 GPU 加速绘制

2、提供属性动画(位移、旋转、缩放等)。。

3、支持视觉效果(阴影、圆角、透明度等)。

4、支持图层层级管理(Z 顺序)。

macOS中的CALayer

在 macOS 中,NSView 可以拥有一个 CALayer,但默认没有,需要手动启用:

view.wantsLayer = true

然后就可以访问:

view.layer?.backgroundColor = NSColor.red.cgColor
view.layer?.cornerRadius = 10

常见属性

1、backgroundColor:CGColor?类型,背景颜色。

2、cornerRadius:CGFloat类型,圆角半径。

3、borderWidth:CGFloat类型,边框宽度。

4、borderColor:CGColor?类型,边框颜色。

5、shadowColor:CGColor?类型,阴影颜色。

6、shadowOpacity:Float类型,阴影透明度。

7、shadowOffset:CGSize类型,阴影偏移。

8、shadowRadius:CGFloat类型,阴影模糊半径。

9、opacity:Float类型,透明度(0~1)。

10、transform:CATransform3D类型,三维变换(旋转/缩放等)。

11、contents:Any?类型,图像内容(CGImage, NSImage, CALayer 等)。

设置视图样式

在NSView视图中,将wantsLayer属性改为true后,可以使用CALayer的各种渲染属性。

let view = NSView(frame: NSRect(x: 0, y: 0, width: 200, height: 200))
view.wantsLayer = true
view.layer?.backgroundColor = NSColor.systemBlue.cgColor
view.layer?.cornerRadius = 10
view.layer?.borderWidth = 2
view.layer?.borderColor = NSColor.white.cgColor
view.layer?.shadowColor = NSColor.black.cgColor
view.layer?.shadowOpacity = 0.5
view.layer?.shadowOffset = CGSize(width: 4, height: -4)

CALayer 与 NSView 的区别

1、管理内容:NSView负责事件、布局、交互,CALayer负责渲染、动画、视觉效果。

2、子视图:NSView可以包含子视图,CALayer也可以包含子图层。

3、内容:NSView需要绘制内容,CALayer可显示图片、颜色、子图层。

4、线程:NSView线程绑定(主线程),CALayer相对轻量,可后台渲染。

CALayer 不是替代 NSView,而是NSView的底层绘图引擎和动画基础设施。

使用场景

1、修改背景颜色

view.wantsLayer = true
view.layer?.backgroundColor = NSColor.red.cgColor

DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    CATransaction.begin()
    CATransaction.setAnimationDuration(1.0)
    view.layer?.backgroundColor = NSColor.green.cgColor
    CATransaction.commit()
}

总结

CALayer(Core Animation Layer),负责图形绘制、动画、视觉效果。

配合 NSView 或 UIView 使用,设置 view.wantsLayer = true 后启用。

优势为:高性能、GPU 加速、可动画、支持视觉特效。

相关文章

1、macOS视图NSView:https://fangjunyu.com/2025/07/01/macos%e8%a7%86%e5%9b%bensview/

2、macOS颜色NSColor:https://fangjunyu.com/2025/07/01/macos%e9%a2%9c%e8%89%b2nscolor/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注