.transformEffect用法

.transformEffect 是 SwiftUI 中的一个修饰符,用于对视图应用 2D 仿射变换(Affine Transform) ,比如平移、旋转、缩放或倾斜等效果。它基于 CGAffineTransform,适用于调整视图的位置、大小或形状,但不同于 3D 变换(如 rotation3DEffect)。


基本用法

swift 复制代码
视图
    .transformEffect(CGAffineTransform(translationX: 50, y: 50)) // 平移

常见变换示例

  1. 平移(Translation)

    将视图沿 X/Y 轴移动:

    swift 复制代码
    .transformEffect(CGAffineTransform(translationX: 20, y: 10))
  2. 旋转(Rotation)

    旋转视图(弧度制):

    swift 复制代码
    .transformEffect(CGAffineTransform(rotationAngle: .pi / 4)) // 45度
  3. 缩放(Scale)

    调整视图大小:

    swift 复制代码
    .transformEffect(CGAffineTransform(scaleX: 1.5, y: 0.8))
  4. 组合变换

    通过链式调用或直接组合:

    swift 复制代码
    let transform = CGAffineTransform(translationX: 50, y: 0)
        .rotated(by: .pi / 4)
        .scaledBy(x: 2, y: 1)

注意事项

  • 2D 变换 :与 .rotation3DEffect 不同,transformEffect 仅支持 2D 变换。
  • 性能 :适合轻量级动画,复杂变换建议结合 Canvas 或 Metal。
  • 坐标系 :变换基于视图的 局部坐标系(以自身中心为原点)。

完整示例

swift 复制代码
Text("Hello, SwiftUI")
    .padding()
    .background(Color.blue)
    .foregroundColor(.white)
    .transformEffect(CGAffineTransform(rotationAngle: .pi / 6)) // 旋转30度

如果需要 3D 变换 (如透视效果),应改用 .rotation3DEffect 或自定义 ProjectionTransform

相关推荐
可乐鸡翅yeah_14 分钟前
hls.js 多实例并发踩坑,多视频页面播放器内存与冲突问题解决
开发语言·前端·javascript·音视频·hls·m3u8·m3u8在线播放
涛涛ing22 分钟前
你的页面为什么总是卡成PPT?2026年,90%的前端都忽略了主线程
前端
SoaringHeart23 分钟前
Flutter 进阶 | 组件封装:用 CustomPainter 实现光环动画组件AnimatedHalo
前端·flutter
IT_陈寒28 分钟前
JavaScript的隐式转换太坑了,我的==比较怎么就炸了?
前端·人工智能·后端
雪芽蓝域zzs41 分钟前
第十四节:后端返回权限动态路由
前端·javascript·vue.js
Rain5091 小时前
谁动了我的 URL?——记一次微前端“灵异 Bug“的排查实录
前端·vue.js·人工智能·前端框架·bug·ai编程
bjzhang751 小时前
使用HTML+CSS美化上传进度条展示
前端·css·html
何以解忧,唯有..1 小时前
Vue 3 响应式核心:ref() 与 reactive() 的深入解析与实战
前端·javascript·vue.js
晴天161 小时前
Chrome DevTools Protocol(CDP)分享-Day36
前端·chrome·chrome devtools
风骏时光牛马1 小时前
程序员的职场成长:技术之外,更要修炼底层思考力
前端