我有一个SVG文件,我使用PocketSVG加载了该文件。 我可以获得SVG文件的每个单独的层。 我想在SVG的每个部分上添加点击事件。为此,我正在使用以下方法。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let point = touches.first?.location(in: self.view)
if let layer = self.view.layer.hitTest(point!) as? CAShapeLayer {
if (layer.path?.contains(point!))! {
layer.fillColor = UIColor.red.cgColor
}
}
}
我想调整全图的大小并适合视图。
如果我在CALalyer中添加了所有图层,然后应用CATransform3DMakeScale
和CATransform3DTranslate
来调整图像的大小,那么它就可以了,但是由于在一个超级播放器中添加了所有图层,所以我无法访问SVG的单独部分。
此代码如下
let imgLayer = CALayer()
for layer of arrAllLayers {
let shapeLayer = CAShapeLayer()
shapeLayer.path = layer.cgPath
shapeLayer.fillColor = UIColor.gray.cgColor
shapeLayer.bounds = (shapeLayer.path?.boundingBox)!
imgLayer.addSublayer(shapeLayer)
}
var transform = CATransform3DMakeScale(0.25, 0.25, 1.0)
transform = CATransform3DTranslate(transform, 0, 200, 0)
imgLayer.transform = transform
self.view.layer.addSublayer(imgLayer)
以上代码正确调整了图像的大小,但无法检测到每个部分的触摸。
如果我喜欢的话
let imgLayer = CALayer()
for layer of arrAllLayers {
let shapeLayer = CAShapeLayer()
shapeLayer.path = layer.cgPath
shapeLayer.fillColor = UIColor.gray.cgColor
shapeLayer.bounds = (shapeLayer.path?.boundingBox)!
var transform = CATransform3DMakeScale(0.25, 0.25, 1.0)
transform = CATransform3DTranslate(transform, 0, 200, 0)
shapeLayer.transform = transform
self.view.layer.addSublayer(shapeLayer)
}
在此代码层中调整大小,但图像的每个部分之间都有空间,因此它看起来不像预期的输出。
上面的代码输出是这个。
预期产量