gpt4 book ai didi

ios - 使用 UIButton 的 z 顺序将子层或 UIView 作为 subview 添加到顶部仍然在 View 后面或看起来透明

转载 作者:行者123 更新时间:2023-11-28 13:47:13 25 4
gpt4 key购买 nike

我有一个 UIButton,我想在它上面添加一个圆形角标(Badge),这是它的样子。

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()

override func viewDidLoad() {
super.viewDidLoad()
mybtn.layer.borderColor = UIColor.blue.cgColor
mybtn.layer.cornerRadius = 3.0
mybtn.layer.borderWidth = 2.0
mybtn.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
addCircleBadge(20, color: UIColor.red.withAlphaComponent(1.0))
}

但是这一层看起来是透明的,所以按钮区域是可见的,我想在按钮顶部有一个不透明层。可以通过图层完成还是我需要添加不同的 View 并将按钮和这个单独的 UIView 放在一个公共(public) View 中

button with ca layer

最佳答案

据我了解,您为 button.layer 设置了 borderWidthborderColor。此 button.layer 承载您添加到它们的所有其他子层,这就是为什么您的边框始终位于顶部。

因此您可以使用附加 View 来绘制圆或...只需删除 button.layer 的设置 borderWidthborderColor 并添加另一个将覆盖边框的子层。

例如:

    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)
}

关于ios - 使用 UIButton 的 z 顺序将子层或 UIView 作为 subview 添加到顶部仍然在 View 后面或看起来透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55257897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com