当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Never transaction(_:)用法及代码示例


实例方法

transaction(_:)

将给定的事务突变函数应用于视图中使用的所有动画。

声明

func transaction(_ transform: @escaping (inout Transaction) -> Void) -> some View

返回值

包装此视图并将转换应用于视图中使用的所有事务的视图。

参数

transform

应用于此视图中事务的转换。

详述

使用此修改器更改或替换视图中使用的动画。考虑由同时执行所有三个动画的按钮控制的三个相同的动画:

  • 第一个动画将 “Rotation” Text 视图旋转 360 度。

  • 第二个使用 transaction(_:) 修改器通过在动画开始时添加两秒延迟来更改动画,然后将 “Rotation\nModified” Text 视图动画的旋转速度增加 2 倍。

  • 第三个动画使用transaction(_:) 修改器将影响“Animation\nReplaced” Text 视图的旋转动画替换为弹簧动画。

以下代码实现了这些动画:


struct TransactionExample: View {
    @State var flag = false


    var body: some View {
        VStack(spacing: 50) {
            HStack(spacing: 30) {
                Text("Rotation")
                    .rotationEffect(Angle(degrees:
                                            self.flag ? 360 : 0))


                Text("Rotation\nModified")
                    .rotationEffect(Angle(degrees:
                                            self.flag ? 360 : 0))
                    .transaction { view in
                        view.animation =
                            view.animation?.delay(2.0).speed(2)
                    }


                Text("Animation\nReplaced")
                    .rotationEffect(Angle(degrees:
                                            self.flag ? 360 : 0))
                    .transaction { view in
                        view.animation = .interactiveSpring(
                            response: 0.60,
                            dampingFraction: 0.20,
                            blendDuration: 0.25)
                    }
            }


            Button("Animate") {
                withAnimation(.easeIn(duration: 2.0)) {
                    self.flag.toggle()
                }
            }
        }
    }
}

ImageButton 等叶视图上使用此修饰符,而不是在 VStackHStack 等容器视图上使用。转换适用于该视图中的所有子视图;在容器视图上调用 transaction(_:) 可能会导致执行范围不受限制,具体取决于视图层次结构的深度。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Never transaction(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。