如何在 UIView 中定位 CAShapeLayer
How to position CAShapeLayer in a UIView
我在 Stack overflow 上看到了很多答案,但是 none 帮助了我。
我创建了一个可以绘制的 DrawView。我创建了一个 UIBezierPath
的实例用于绘图。
我想在一个小视图(图像上的红色视图)上传输我的绘图。我就是这么做的:
// This function is called when the user has finished to draw.
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let shapeLayer = CAShapeLayer()
//The CAShapeLayer has the same path of the drawing (currentPath is the instance of UIBezierPath).
shapeLayer.path = currentPath?.cgPath
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineWidth = 10.0
//drawingView is the red view where I want to see my drawing in the center. This line of code doesn't work like I expect because the drawing doesn't appear in the center of the view.
shapeLayer.position = CGPoint(x: drawingView.frame.midX, y: drawingView.frame.midY)
//I add the shapeLayer to the drawingView.
drawingView.layer.addSublayer(shapeLayer)
}
这是应用程序的图片:
有什么提示吗?谢谢。
问题出在这一行:
shapeLayer.position = CGPoint(x: drawingView.frame.midX, y: drawingView.frame.midY)
你在任何地方都说 drawingView.frame
,改为说 drawingView.bounds
。
(其实你应该说drawingView.layer.bounds
,而不是简单的drawingView.bounds
,但碰巧它们是一回事。)
但是,还有第二个问题,就是你的形状层没有大小。因此它的 position
与其左上角相同。出于这个原因,你最好通过说
将它置于其超级层的中心
shapeLayer.frame = drawingView.layer.bounds
然后您将拥有完全占据绘图视图的形状图层。 (如果你给形状图层一个背景颜色,你将能够清楚地看到这一点。)现在你的问题是你想确保绘图路径本身在 in 形状中居中层,但这是一个不同的练习。
我在 Stack overflow 上看到了很多答案,但是 none 帮助了我。
我创建了一个可以绘制的 DrawView。我创建了一个 UIBezierPath
的实例用于绘图。
我想在一个小视图(图像上的红色视图)上传输我的绘图。我就是这么做的:
// This function is called when the user has finished to draw.
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let shapeLayer = CAShapeLayer()
//The CAShapeLayer has the same path of the drawing (currentPath is the instance of UIBezierPath).
shapeLayer.path = currentPath?.cgPath
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineWidth = 10.0
//drawingView is the red view where I want to see my drawing in the center. This line of code doesn't work like I expect because the drawing doesn't appear in the center of the view.
shapeLayer.position = CGPoint(x: drawingView.frame.midX, y: drawingView.frame.midY)
//I add the shapeLayer to the drawingView.
drawingView.layer.addSublayer(shapeLayer)
}
这是应用程序的图片:
有什么提示吗?谢谢。
问题出在这一行:
shapeLayer.position = CGPoint(x: drawingView.frame.midX, y: drawingView.frame.midY)
你在任何地方都说 drawingView.frame
,改为说 drawingView.bounds
。
(其实你应该说drawingView.layer.bounds
,而不是简单的drawingView.bounds
,但碰巧它们是一回事。)
但是,还有第二个问题,就是你的形状层没有大小。因此它的 position
与其左上角相同。出于这个原因,你最好通过说
shapeLayer.frame = drawingView.layer.bounds
然后您将拥有完全占据绘图视图的形状图层。 (如果你给形状图层一个背景颜色,你将能够清楚地看到这一点。)现在你的问题是你想确保绘图路径本身在 in 形状中居中层,但这是一个不同的练习。