- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
这是在 GameViewController.m -(void)fillMutablePath{ CGPoint movePoint = CGPointFromString([pointsTo
我正在做一个 iOS 游戏,想用这种方法进行碰撞检测。 由于有很多(50+)点可以检查每一帧,我想知道这种方法是否可以在 iDevice 的图形硬件上运行。 最佳答案 跟进@DavidRönnqvis
我正在使用 SVGKit 在我的应用程序中显示不同的 SVG 内容。所需的功能之一是检测 svg 路径内区域内发生的点击并用某种颜色填充它。 CGPathContainsPoint 似乎是正确的解决方
我需要检查 CGPoint 是否在 SKSpriteNode 中。 经过一些研究,CGPathContainsPoint 似乎适合我的目的。 if CGPathContainsPoint(my_spr
我正在制作一个 CGPoint 和一个 CGPathRef,然后尝试查找 CGPoint 是否在 CGPathRef 内部。这是代码: CGMutablePathRef path = CGPathCr
我会尽量保持简短。 拿下面的测试代码: CGPath* path = CGPathCreateMutable(); CGPathMoveToPoint(path, nil, 318.43, 183.
在 SO question 中我今年早些时候问过,我得到了这段代码: MKPolygonView *polygonView = (MKPolygonView *)[self.mapView viewF
我正在尝试检测 map 注释是否在 MKCircle 内。我不知疲倦地浏览了互联网,但运气不佳,没有找到关于 Swift 2.0 的可靠教程。所有教程或 Stack Overflow 问题都使用已弃用
我是一名优秀的程序员,十分优秀!