Ios 清除CAShapeLayer中的所有内容
我有一个在AVCaptureVideoPreviewLayer上绘制矩形的函数。该矩形需要在触发时刷新,并绘制一个新的矩形。最好是删除CAShapeLayer中的所有内容,还是删除该层并添加新层?我也不知道怎么做,但我的尝试如下Ios 清除CAShapeLayer中的所有内容,ios,swift,core-graphics,calayer,cashapelayer,Ios,Swift,Core Graphics,Calayer,Cashapelayer,我有一个在AVCaptureVideoPreviewLayer上绘制矩形的函数。该矩形需要在触发时刷新,并绘制一个新的矩形。最好是删除CAShapeLayer中的所有内容,还是删除该层并添加新层?我也不知道怎么做,但我的尝试如下 func showRectangle(recLayer: CAShapeLayer, vnRectangleObservation: VNRectangleObservation) -> Void{ // new CAShapeLayer let
func showRectangle(recLayer: CAShapeLayer, vnRectangleObservation: VNRectangleObservation) -> Void{
// new CAShapeLayer
let newLayer = CAShapeLayer.init()
let rectangle = UIBezierPath.init()
rectangle.move(to: CGPoint.init(x: vnRectangleObservation.topLeft.x, y: vnRectangleObservation.topLeft.y))
rectangle.addLine(to: CGPoint.init(x: vnRectangleObservation.topRight.x, y: vnRectangleObservation.topRight.y))
rectangle.addLine(to: CGPoint.init(x: vnRectangleObservation.bottomRight.x, y: vnRectangleObservation.bottomRight.y))
rectangle.addLine(to: CGPoint.init(x: vnRectangleObservation.bottomLeft.x, y: vnRectangleObservation.bottomLeft.y))
rectangle.close()
newLayer.opacity = 0.4
newLayer.path = rectangle.cgPath
newLayer.fillColor = UIColor.orange.cgColor
// replace current layer containing old rectangle
recLayer.replaceSublayer(recLayer, with: newLayer)
}
您可以通过制作
oldLayer.removeFromSuperlayer()
然后添加一个新的
parentLayer.addSublayer(newLayer)
我认为最好的解决方案是在视图出现在屏幕上之前准备好两个图层,并通过触发器更改它们。您可以通过
oldLayer.removeFromSuperlayer()
然后添加一个新的
parentLayer.addSublayer(newLayer)
我认为最好的解决方案是在视图出现在屏幕上之前准备好这两个层,并通过触发器更改它们。您可以迭代所有子层并删除它们
for sublayer in yourLayer.sublayers ?? [] {
sublayer.removeFromSuperlayer()
}
只需使用addSublayer
添加新的:
let newSublayer = CAShapeLayer()
yourLayer.addSublayer(newSublayer)
您可以遍历所有子层并删除它们
for sublayer in yourLayer.sublayers ?? [] {
sublayer.removeFromSuperlayer()
}
只需使用addSublayer
添加新的:
let newSublayer = CAShapeLayer()
yourLayer.addSublayer(newSublayer)