Обнаружить постукивание по преобразованному пути CAShapeLayer - PullRequest
0 голосов
/ 13 октября 2019

У меня есть несколько слоев CAShapeLay, и все они могут быть преобразованы с помощью CATransform3D.

Я нашел способ точно определять отводы, которые находятся на или внутри путей этих слоев, но он работает, только если слои не преобразованы.

Как я могу сделать эту работуправильно в любых ситуациях?

@objc private func userTapped(recognizer: UITapGestureRecognizer) {
        let tapLocation = recognizer.location(in: canvas)

        for shapeLayer in shapeLayers {
            guard let path = shapeLayer.path else { continue }

            let tempPath = path.copy(strokingWithWidth: CGFloat(lineWidth * 2), lineCap: .round, lineJoin: .round, miterLimit: .zero)

            if tempPath.contains(tapLocation) {
                // DO SOMETHING
            }
        }
    }

1 Ответ

0 голосов
/ 13 октября 2019

Вам нужно получить местоположение крана в собственной геометрии преобразованного слоя.

@objc private func userTapped(recognizer: UITapGestureRecognizer) {
    let canvasLocation = recognizer.location(in: canvas)

    for shapeLayer in shapeLayers {
        guard let path = shapeLayer.path else { continue }
        let shapeLocation = shapeLayer.convert(canvasLocation, from: canvas.layer)

        let tempPath = path.copy(strokingWithWidth: CGFloat(lineWidth * 2), lineCap: .round, lineJoin: .round, miterLimit: .zero)

        if tempPath.contains(shapeLocation) {
            // DO SOMETHING
        }
    }
}
...