Open CodeTropolis opened 1 year ago
Hi @CodeTropolis,
You're right that onTap
was renamed to onTapGesture
and documentation doesn't reflect it. So we'll update it.
But your examples are correct. Could you attach an SVG you're using? Probably a node you're trying to get is missing or it's an element which couldn't be tapped (for example, shape with stroke and without fill).
Here's the SVG(Github attachment not working): https://pastebin.com/Eguxingd
The SVG is a world map.
Not concerned about CSS id or class properties except for the necessary props required for tap recognition on a region.
Appreciate your help.
I reproduced your issue. Tap works on some parts of "americas" for me, but "europe" and "asia" can't be tapped at all. Will take a look.
I'm experiencing something similar. I'm able to log to console upon a tap on both americas and europe but not asia. Also, the fill does not change color.
struct ZoneSelect: View {
var body: some View {
let filePath = Bundle.main.url(forResource: "zones.svg", withExtension: nil)!
let root = SVGView(contentsOf: filePath)
let zones = ["americas", "europe", "asia"]
zones.forEach { region in
let zone = root.svg?.getNode(byId: region)
zone?.onTapGesture {
print("Region: \(region) tapped!")
(zone as? SVGPath)?.fill = SVGColor.by(name: "orange")
}
}
return ScrollView(.horizontal) {
root.frame(width: 1280, height: 640)
}
}
}
That's because zone is not a path, it's a group containing several paths. You need to use something like this to change fill color:
func setColor(_ node: SVGNode, color: SVGColor) {
if let group = node as? SVGGroup {
for content in group.contents {
setColor(content, color: color)
}
} else if let shape = node as? SVGShape {
shape.fill = color
}
}
...
setColor(zone, color: SVGColor.by(name: "orange"))
Thank you Yuri! Appreciate your help.
Nor does the following from your "Getting Started" recognize a tap:
What is the correct API to recognize a tap? Have you changed the API overall? If so, where's the documentation?