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