matchedGeometryEffect

iOS14引入的新特性matchedGeometryEffect允许开发者创建视图变形动画。该修饰符通过指定命名空间和ID,计算不同视图形状间的差异,实现平滑的转换效果。文中示例展示了如何使用matchedGeometryEffect在点击事件中切换Circle视图的大小,创建动态的扩大和缩小动画。此功能仅在iOS14及以上版本支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS 14 中引入了 matchedGeometryEffect() 修饰符,允许视图进行变形动画。你只需要会绘制原视图和最终要转换到的视图,matchedGeometryEffect 就会自动计算二者之间的差异并创建出转换动画:

struct ContentView: View {
  @Namespace private  var shapeTransition // 1
  @State var expand = false // 2
  var body: some View {
    if expand {
        Circle()
            .fill(Color.green)
            .matchedGeometryEffect(id: "circle", in: shapeTransition) // 3
            .frame(width: 300, height: 300)
            .offset(y: -200)
            .animation(.default)
            .onTapGesture { // 4
                self.expand.toggle()
            }
    } else {
        Circle()
            .fill(Color.green)
            .matchedGeometryEffect(id: "circle", in: shapeTransition) // 5
            .frame(width: 150, height: 150)
            .offset(y: 0)
            .animation(.default)
            .onTapGesture { // 6
                self.expand.toggle()
            }
    }
  }
}
  1. 定义一个命名空间,一个命名空间是一个名字(ID),用于区分不同的动画,位于同一个命名空间(shapeTransition)内的对象,将受此动画的影响。
  2. 视图状态 expand,用于切换 Circle 视图的不同状态,expand 为 true 绘制加大的圆,expand 为 false 绘制较小的圆。大小圆之间来回切换。
  3. matchedGeometryEffect(id:, in:) 将此视图标记为变形动画 shapeTransition 之内的对象,对象 id 为 circle。
  4. 点击时切换到另一状态。
  5. 虽然前面已经标记过一次 matchedGeometryEffect,但这里仍然需要标记一次,因为任一状态下绘制的是完全不同的 Circle 视图,它们不可能并存。
  6. 点击时切换到另一状态。

matchedGeometryEffect 确实很方便,然而只有 iOS 14 以上才支持。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值