SwiftUI动画之几何匹配

SwiftUI动画之几何匹配

记录一下 日常开发中经常使用到的滑块功能 如何同工几何匹配快速制作点击动画

import SwiftUI

struct MatchedGeometryEffestExamle: View {
    let categories = ["Home", "Popular", "Saved"]
    @State var selecedTitle = "Home"
    /// 使用@Namespace 来声明对应命名空间,给系统使用
    @Namespace private var namespace
    
    var body: some View {
        HStack {
            ForEach(categories, id: \.self) { title in
                VStack(content: {


                    Text(title)
                        .font(.headline)
                        .frame(maxWidth: .infinity)
                        .frame(height: 35)
                        .onTapGesture {
                            withTransaction(Transaction.init(animation: .easeInOut)) {
                                selecedTitle = title
                            }
                        }
                        .foregroundColor(selecedTitle == title ? .red : .black)
                    if selecedTitle == title {
                        RoundedRectangle(cornerRadius: 10)
                            .fill(.red)
                            /// 通过匹配id 和 namespace 系统做动画的时候就可以知道这是同一个对象,然后就自动给先后出现的为宜添加对应的效果
                            .matchedGeometryEffect(id: "MatchedGeometryEffestExamle_RoundedRectangle", in: namespace)
                            .frame(width: 35, height: 2)
                           
                    }
                    
                })
                    
            }
        }.padding()
    }
}

#Preview {
    MatchedGeometryEffestExamle()
}

效果如下:
在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值