Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用UIButton的z顺序将子层或UIView作为子视图添加到顶部时,仍然会在视图后面或看起来是透明的_Ios_Swift_Uibezierpath_Cashapelayer - Fatal编程技术网

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