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
Тогда этот код не работает должным образом.
Надеюсь на хорошие голевые передачи. С уважением.