我创建了度量演示,可以放置多个点并显示它们之间的距离。效果很好
我想预览一下,到目前为止,已经使用UIBezierPath
绘制了现实世界中的UIView。就像http://armeasure.com/
我已经尝试了很多方法来实现这一目标,但是我找不到正确的方法来实现它。
if self.linkList.count == 1 {
bezierPath.removeAllPoints()
bezierPath.move(to: CGPoint(x: 10,y: 10))
} else {
guard self.linkList.count > 1 ,let object2 = self.linkList.lastNode, let object1 = self.linkList.lastNode?.previous else {return}
let value = self.getMeasurementXandYBetween(vector1: object1.node.mainNode.position, and: object2.node.mainNode.position)
print(value)
let x = Double((object1.node.mainNode.position.x + value ) * 377.9527559055 )
let y = Double((object1.node.mainNode.position.y + value) * 377.9527559055)
let pointCoordinates = CGPoint(x: x , y: y)
print("x : Y ",x,y)
bezierPath.addLine(to: pointCoordinates)
}
shapeLayer.removeFromSuperlayer()
shapeLayer.path = bezierPath.cgPath
shapeLayer.lineWidth = 0.5
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.position = CGPoint(x: 0, y: 0)
self.viewToDraw.layer.addSublayer(shapeLayer)
func getMeasurementXandYBetween(vector1:SCNVector3, and vector2:SCNVector3) -> Float {
return sqrtf((vector1.x - vector2.x) * (vector1.x - vector2.x) + (vector1.y - vector2.y) * (vector1.y - vector2.y))
}
我使用的逻辑(不起作用的是)上一个节点的位置+我从getMeasurementXandYBetween
得到的距离乘以377。
请提出提示或任何其他解决方案
答案 0 :(得分:1)
您可以使用SCNSceneRenderer
上的projectPoint()
来获取屏幕空间中任何点的坐标。
这将为您提供一个包含3个元素的向量,使用前两个元素构建CGPoint
,然后从这些点构建形状。