使用 AutoLaout 向 UIButton 添加 CAShapeLayer 未正确显示
adding a CAShapeLayer to UIButton with AutoLaout is not show Correctly
我想制作一个左上角和左下角半径 = 15 的按钮,所以我制作了这个 class 来实现它
class pathBUtton:UIBUtton{
override func layoutSubviews() {
super.layoutSubviews()
let shapeLayer = CAShapeLayer()
let path = UIBezierPath.init(roundedRect: self.bounds, byRoundingCorners: [.topLeft,.bottomLeft], cornerRadii: CGSize.init(width: 15.0, height: 0.0))
shapeLayer.lineWidth = 5.0
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.clear.cgColor
self.backgroundColor = UIColor.clear
self.layer.addSublayer(shapeLayer)
}
将 IB 中的按钮 class 设置为 pathButton 后,按钮文本未显示,请参见 image 并且 cashapelayer 不适合按钮框架,在蓝色后面看到白色。蓝色部分是按钮,白色部分是包含按钮和标签的视图。
在视图控制器中,我将视图 cornerradius 设置为 15,如下所示
valoraView.layer.cornerRadius = 15
但是路径中视图的半径和shapelayer的半径之间存在差异。
因此,我们将不胜感激
I want to make a button with top left and botton left corner radius = 15
self.button.layer.cornerRadius = 15
self.button.layer.borderWidth = 2
self.button.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMinXMinYCorner]
我想制作一个左上角和左下角半径 = 15 的按钮,所以我制作了这个 class 来实现它
class pathBUtton:UIBUtton{
override func layoutSubviews() {
super.layoutSubviews()
let shapeLayer = CAShapeLayer()
let path = UIBezierPath.init(roundedRect: self.bounds, byRoundingCorners: [.topLeft,.bottomLeft], cornerRadii: CGSize.init(width: 15.0, height: 0.0))
shapeLayer.lineWidth = 5.0
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.clear.cgColor
self.backgroundColor = UIColor.clear
self.layer.addSublayer(shapeLayer)
}
将 IB 中的按钮 class 设置为 pathButton 后,按钮文本未显示,请参见 image 并且 cashapelayer 不适合按钮框架,在蓝色后面看到白色。蓝色部分是按钮,白色部分是包含按钮和标签的视图。 在视图控制器中,我将视图 cornerradius 设置为 15,如下所示
valoraView.layer.cornerRadius = 15
但是路径中视图的半径和shapelayer的半径之间存在差异。 因此,我们将不胜感激
I want to make a button with top left and botton left corner radius = 15
self.button.layer.cornerRadius = 15
self.button.layer.borderWidth = 2
self.button.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMinXMinYCorner]