gpt4 book ai didi

swift - CGPathContainsPoint 相对于绝对坐标 iOS

转载 作者:行者123 更新时间:2023-11-30 13:18:47 29 4
gpt4 key购买 nike

我正在使用 SVGKit 在我的应用程序中显示不同的 SVG 内容。所需的功能之一是检测 svg 路径内区域内发生的点击并用某种颜色填充它。

CGPathContainsPoint 似乎是正确的解决方案,但问题是我的 svg 路径是使用相对坐标设置的(而点击点在整个图像区域内是绝对的)。

下面是我正在使用的一些代码:

class ViewController: UIViewController {
@IBOutlet weak var imageArea: UIView!
var iv : SVGKLayeredImageView!
let im = SVGKImage(named: "connections.svg")

override func viewDidLoad() {
super.viewDidLoad()

im.size = self.imageArea.frame.size
iv = SVGKLayeredImageView(SVGKImage: im)
let recognizer = UITapGestureRecognizer(target: self, action:#selector(ViewController.handleTap(_:)))
iv.addGestureRecognizer(recognizer)
self.imageArea.addSubview(iv)
}

func handleTap(recognizer: UITapGestureRecognizer) {
let point = recognizer.locationInView(iv)
changeFillColorRecursively(iv.layer.sublayers!, color: UIColor.redColor(), point: point)
}

func changeFillColorRecursively(sublayers: [AnyObject], color: UIColor, point: CGPoint) {
for layer in sublayers {
if let l = layer as? CAShapeLayer {
if CGPathContainsPoint(l.path, nil, point, false) {
l.fillColor = color.CGColor
}
}
if let l = layer as? CALayer, sub = l.sublayers {
changeFillColorRecursively(sub, color: color, point: point)
}
}
}
}

填充代码可以运行,但是点数比较错误,导致没有填充或者多个区域被填充。

我的想法是我应该使用 CGPathContainsPoint 函数的 affineTransform 参数,但是我不太确定如何正确设置转换矩阵。

最佳答案

SVGKit 具有内置的路径点功能(如果您手动执行此功能,您可能会错过实现它的一些微妙之处 - 包括关于相对路径与绝对路径的这一点)。

不能使用内置版本吗?

(或者,使用源代码并构建您自己的 - 但在我的脑海中,它是跨 4 个不同文件的大约 200 行源代码,用于处理所有递归转换等)

关于swift - CGPathContainsPoint 相对于绝对坐标 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37964624/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com