Ios 使用UIButton的z顺序将子层或UIView作为子视图添加到顶部时,仍然会在视图后面或看起来是透明的
我有一个Ios 使用UIButton的z顺序将子层或UIView作为子视图添加到顶部时,仍然会在视图后面或看起来是透明的,ios,swift,uibezierpath,cashapelayer,Ios,Swift,Uibezierpath,Cashapelayer,我有一个ui按钮,我想在上面加一个圆圈徽章,下面是它的外观 public func addCircleBadge(_ width: CGFloat, color: UIColor) { let bounds = self.mybtn.bounds let layer = CAShapeLayer() let radius = width / 2 layer.path = UIBezierPath(roundedRect: CGRec
ui按钮
,我想在上面加一个圆圈徽章,下面是它的外观
public func addCircleBadge(_ width: CGFloat, color: UIColor) {
let bounds = self.mybtn.bounds
let layer = CAShapeLayer()
let radius = width / 2
layer.path = UIBezierPath(roundedRect: CGRect(x: bounds.width - (radius + 2.0), y: bounds.minY - (radius-2.0), width: width, height: width), cornerRadius: radius).cgPath
layer.fillColor = color.cgColor
layer.zPosition = 999
layer.name = "circleBadge"
self.mybtn.layer.addSublayer(layer)
}
在viewDidLoad()中
但这层看起来是透明的,所以按钮区域是可见的,我想在按钮顶部有一个不透明层。它可以通过图层完成,还是我需要添加一个不同的视图,并将按钮和这个单独的ui视图
放在一个公共视图中
据我所知,您为按钮.层设置了边框宽度
和边框颜色
。
此按钮。层
承载您添加到其中的所有其他子层,这就是您的边框始终位于顶部的原因
因此,您可以使用其他视图来绘制圆或。。。
只需删除按钮的设置borderWidth
和borderColor
。图层
,然后添加另一个子层,覆盖您的边框
例如:
func addBorder(borderWidth: CGFloat = 1.0, borderColor: UIColor = UIColor.blue) {
let layer = CALayer()
let frame = self.mybtn.frame
layer.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height)
layer.borderColor = borderColor.cgColor
layer.borderWidth = borderWidth
self.mybtn.layer.addSublayer(layer)
}
在ViewDidLoad中:
override func viewDidLoad() {
super.viewDidLoad()
addBorder()
addCircleBadge(20, color: UIColor.red)
}
还有一个更新用于addCircleBadge
public func addCircleBadge(_ width: CGFloat, color: UIColor) {
...
self.mybtn.layer.insertSublayer(layer, at: 0)
}
您没有显示所有相关的代码行。ui按钮
位于故事板中,除此之外,我添加了边框,没有其他内容
public func addCircleBadge(_ width: CGFloat, color: UIColor) {
...
self.mybtn.layer.insertSublayer(layer, at: 0)
}