【问题标题】:SwiftUI Pass two child views to ViewSwiftUI 将两个子视图传递给 View
【发布时间】:2022-05-19 21:05:05
【问题描述】:

我正在尝试使用@ViewBuilder 将两个视图作为视图的子级传递。

我需要能够知道哪个是第一个,哪个是第二个,因为我想根据某些状态显示一个或另一个。

我能够以非通用方式完成这项工作,这意味着我明确给出了子视图的类型。

struct FlippableView<Content: View>: View {
    @State private var flipped = false
    @State private var degrees = 0.0

    var frontCard: FeedItem
    var backCard: FeedItem

    @inlinable public init(@ViewBuilder content: () -> Content) {
        var t = content() as! TupleView<(FeedItem, FeedItem)>
        self.frontCard = t.value.0
        self.backCard = t.value.1
    }

    var body: some View {
        return Group() {
            if self.degrees < 90 {
                self.frontCard
            } else {
                self.backCard
                    .rotation3DEffect(Angle(degrees: 180), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))

            }
        }
    }

如何通过摆脱我的 FeedItem 类型来使其更通用。我希望这两个视图是两种不同的视图类型。

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    这是可能的变体。使用 Xcode 11.4 / iOS 13.4 测试

    struct FlippableView<V1: View, V2: View>: View {
        @State private var flipped = false
        @State private var degrees = 0.0
    
        var frontCard: V1
        var backCard: V2
    
        @inlinable public init(@ViewBuilder content: () -> TupleView<(V1, V2)>) {
            let t = content()
            self.frontCard = t.value.0
            self.backCard = t.value.1
        }
    
        var body: some View {
            return Group() {
                if self.degrees < 90 {
                    self.frontCard
                } else {
                    self.backCard
                        .rotation3DEffect(Angle(degrees: 180), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))
    
                }
            }
        }
    }
    

    backup

    【讨论】:

    • 我不知道怎么打电话给FlippableView。您能否添加一个小示例来说明如何调用它?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多