SwiftUI DragGesture & GeometryReader не работает на iOS 13.5

Мой код отлично работал в iOS 13.2 (с Xcode 11.2).

я использовал DragGesture а также GeometryReader.

import SwiftUI

struct ContentView: View {
    @State private var players = [
        Player(name: "Phile", color: .green, age: 12),
        Player(name: "Alice", color: .blue, age: 22),
        Player(name: "Rob", color: .red, age: 32),
        Player(name: "Bonny", color: .pink, age: 42),
        Player(name: "Kate", color: .orange, age: 52),
        Player(name: "Sam", color: .gray, age: 62)
    ]

    @GestureState private var location: CGPoint = .zero
    @State private var highlighted: Int? = nil
    @State private var prevHighlighted: Int? = nil

    private var Content: some View {
        VStack {
            HStack {
                ForEach(0..<3) { i in
                    PlayerView(scaled: self.highlighted == i, player: self.players[i])
                        .background(self.rectReader(index: i))
                }
            }
            .zIndex((0..<3).contains(highlighted ?? -1) ? 2 : 1)

            HStack {
                ForEach(3..<6) { i in
                    PlayerView(scaled: self.highlighted == i, player: self.players[i])
                        .background(self.rectReader(index: i))
                }
            }
            .zIndex((3..<6).contains(highlighted ?? -1) ? 2 : 1)
        }
    }

    func rectReader(index: Int) -> some View {
        return GeometryReader { (geometry) -> AnyView in
            if geometry.frame(in: .global).contains(self.location) {
                DispatchQueue.main.async {
                    self.prevHighlighted = self.highlighted
                    self.highlighted = index

                    if self.prevHighlighted != nil {
                        let p = self.players[self.prevHighlighted!]
                        self.players[self.prevHighlighted!] = self.players[self.highlighted!]
                        self.players[self.highlighted!] = p
                    }
                }
            }
            return AnyView(Rectangle().fill(Color.clear))
        }
    }

    var body: some View {
        Content
        .gesture(DragGesture(minimumDistance: 0, coordinateSpace: .global)
            .updating($location) { (value, state, transaction) in
                state = value.location
            }.onEnded {_ in
                self.prevHighlighted = nil
                self.highlighted = nil
            })
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct Player {
    var name: String
    var color: Color
    var age: Int

    init(name: String, color: Color, age: Int) {
        self.name = name
        self.color = color
        self.age = age
    }
}

struct PlayerView: View {
    var scaled: Bool = false
    var player: Player = Player(name: "Phile", color: .green, age: 42)

    var body: some View {
        ZStack(alignment: .topLeading) {
            Rectangle().frame(width: 100, height: 100).foregroundColor(player.color).cornerRadius(15.0).scaleEffect(scaled ? 1.5 : 1)

            VStack {
                Text(player.name)
                Text("Age: \(player.age)")
            }.padding([.top, .leading], 10)
        }.zIndex(scaled ? 2 : 1)
    }
}

Недавно я обновил версию Xcode и iOS.Xcode: 11,5, iOS: 13,5

Тогда этот код не работает должным образом.

Надеюсь на хорошие голевые передачи. С уважением.

0 ответов

Другие вопросы по тегам