Я хотел бы узнать, выбран ли мой вид в настоящее время или нет. У меня есть прямоугольник, который представляет карту. После того, как я коснусь карты, карта должна перейти в выбранное состояние и изменить свойства, например цвет.
Но как только я коснусь другого места, карта больше не будет в этом состоянии.
До сих пор мне не удалось выяснить это, когда я пытался со свойством onTapGesture
, но с этим я столкнулся с проблемой, что, когда я касаюсь за пределами этой карты, карта не меняет состояние на ложное, если я не касаюсь картыопять же, что имеет смысл, но в данном случае это неправильный выбор.
import SwiftUI
struct CardView: View {
@State var selected = false
let rectangle = Rectangle()
@State var rectangleColor: Color = .purple
var body: some View {
GeometryReader { g in
self.rectangle
.foregroundColor(self.rectangleColor)
.frame(width: g.size.width / 2, height: g.size.width / 2)
.onTapGesture {
self.selected.toggle()
self.modifyColors()
}
}
}
func modifyColors() {
if selected {
rectangleColor = .red
} else {
rectangleColor = .purple
}
}
}
Выбранное состояние - красный, невыбранное - фиолетовый. Поэтому я хочу, чтобы этот цвет становился красным, когда я касаюсь прямоугольника, а не если я касаюсь его снаружи. Он должен стать фиолетовым только тогда, когда я коснусь за пределами прямоугольника, но не внутри него. Пример: карта фиолетового цвета. Я выбираю его, и он становится красным. Когда я снова коснусь его, он должен остаться красным. Он должен стать только фиолетовым (невыбранным), когда я коснусь где-нибудь за пределами карты, но не внутри нее.
Вид, содержащий этот прямоугольник:
import SwiftUI
struct ContentView: View {
var body: some View {
CardView()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Не важно, гдевид на самом деле - я хочу знать погоду, пространство вокруг этого вида постукивает. Так что, если он находится внутри модального окна или вида сверху на ZStack, поведение должно быть таким же.