Swift 使用AutoLayout使用UILabel屏蔽UIView

Swift 使用AutoLayout使用UILabel屏蔽UIView,swift,uilabel,mask,Swift,Uilabel,Mask,我正在从事一个项目,该项目将产生预期的效果: 我正在使用以下代码成功绘制圆: let circle = CircleView() circle.translatesAutoresizingMaskIntoConstraints = false circle.backgroundColor = UIColor.clear self.addSubview(circle) // Setup constraints circle.centerXAnchor.constraint(eq

我正在从事一个项目,该项目将产生预期的效果:

我正在使用以下代码成功绘制圆:

let circle = CircleView()
circle.translatesAutoresizingMaskIntoConstraints = false
circle.backgroundColor = UIColor.clear
self.addSubview(circle)

    // Setup constraints
    circle.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
    circle.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
    circle.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.6).isActive = true
    circle.heightAnchor.constraint(equalTo: circle.widthAnchor, multiplier: 1.0/1.0).isActive = true
作为参考,这是我的CircleView类:

class CircleView: UIView {

    override func draw(_ rect: CGRect) {

        // Set the path
        let path = UIBezierPath(ovalIn: rect)

        // Set the fill color
        UIColor.black.setFill()

        // Fill
        path.fill()
    }
}
随后,我将创建我的UILabel,如下所示:

let myLabel = UILabel()
myLabel.translatesAutoresizingMaskIntoConstraints = false
myLabel.text = "HELLO"
myLabel.textColor = UIColor.white
circle.addSubview(myLabel)

    // Setup constraints
    myLabel.centerXAnchor.constraint(equalTo: circle.centerXAnchor).isActive = true
    myLabel.centerYAnchor.constraint(equalTo: circle.centerYAnchor).isActive = true
我已尝试使用以下方法遮罩我的圆圈:

circle.mask = myLabel

但是,这会产生与我所追求的效果相反的效果(我的文本在UIView中不是剪切,而是现在的黑色文本)。在哪里可能会出现错误以实现此效果?

遮罩的工作方式相反,当遮罩上的颜色不透明时,它将在该像素位置显示内容,当像素透明时,它将隐藏内容

由于使用
UILabel
无法实现这一点,因此需要使用其他东西作为掩码,例如
CALayer

如果您查找“UILabel透明文本”,您应该会发现类似的结果,基本上也适用于您(有一些更改)


实例化您的
CircleView
,然后实例化一个
CATextLayer
,并将其用作您的
UIView的掩码
掩码以相反的方式工作,当遮罩上的颜色不透明时,它将在该像素位置显示内容,当像素透明时,它将隐藏内容

由于使用
UILabel
无法实现这一点,因此需要使用其他东西作为掩码,例如
CALayer

如果您查找“UILabel透明文本”,您应该会发现类似的结果,基本上也适用于您(有一些更改)


实例化你的
CircleView
,然后实例化一个
CATextLayer
,并将其用作
UIView

的遮罩。虽然这个建议不一定是确定我想要的效果所需要的,但对错误的解释非常有用。我认为这是正确的,因为我描述了对掩蔽如何工作的不正确理解。虽然这个建议不一定是决定我想要的效果所需要的,但对错误的解释是非常有用的。我认为这是正确的,因为我描述了对掩蔽如何工作的错误理解。