Вы добавляете два слоя самостоятельно
layer.addSublayer(shapeLayer1)
layer.addSublayer(shapeLayer2)
, если хотите иметь только одну фигуру .... используйте только один shapeLayer ... Присвойте ему форму на каждое нажатие кнопки ... и Вызовите setNeedsLayout()
.. не используйте несколько shapeLayers для нескольких фигур
Вы можете иметь Enum
public enum ShapeType {
case circle
case square
case star
case Polygon
}
Тогда в вашем классе View
public var shape: ShapeType {
get {
return _shape
}
set(newValue) {
_shape = newValue
setNeedsDisplay()
}
}
вы может иметь форму по умолчанию
private let ilayer = CAShapeLayer()
private var _shape: ShapeType = .circle
Затем вы можете написать функцию
// MARK: - Base shape BezierPath
private func getBaseShape(frame:CGRect) -> UIBezierPath? {
switch _shape {
case .circle:
return UIBezierPath(ovalIn: group)
case .square:
return UIBezierPath(roundedRect: group, cornerRadius: 8)
case .star:
return drawStarShape()
case .polygon:
return drawpolygonPath()
}
}
и присвоить ее форме
let getShapePath = getBaseShape(group: group)