调整所有CAShapeLayer的大小

时间:2018-07-05 09:32:42

标签: ios svg swift4 calayer cashapelayer

我有一个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中添加了所有图层,然后应用CATransform3DMakeScaleCATransform3DTranslate来调整图像的大小,那么它就可以了,但是由于在一个超级播放器中添加了所有图层,所以我无法访问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)
}

在此代码层中调整大小,但图像的每个部分之间都有空间,因此它看起来不像预期的输出。

上面的代码输出是这个。

Above code output

预期产量

Expected output

0 个答案:

没有答案