ios – 标签的反向图层蒙版

前端之家收集整理的这篇文章主要介绍了ios – 标签的反向图层蒙版前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何反转标签的遮罩层?我有一个textLabel,我用它作为一个包含任意图像的imageView的掩码,如下所示:
  1. let image = UIImage(named: "someImage")
  2. let imageView = UIImageView(image: image!)
  3.  
  4. let textLabel = UILabel()
  5. textLabel.frame = imageView.bounds
  6. textLabel.text = "Some text"
  7.  
  8. imageView.layer.mask = textLabel.layer
  9. imageView.layer.masksToBounds = true

上面的内容使textLabel中的文本具有imageView的字体颜色,如How to mask the layer of a view by the content of another view?所示.

如何撤消此操作以从imageView中删除textLabel中的文本?

解决方法

创建UILabel的子类:
  1. class InvertedMaskLabel: UILabel {
  2. override func drawTextInRect(rect: CGRect) {
  3. guard let gc = UIGraphicsGetCurrentContext() else { return }
  4. CGContextSaveGState(gc)
  5. UIColor.whiteColor().setFill()
  6. UIRectFill(rect)
  7. CGContextSetBlendMode(gc,.Clear)
  8. super.drawTextInRect(rect)
  9. CGContextRestoreGState(gc)
  10. }
  11. }

此子类用不透明的颜色填充其边界(在此示例中为白色,但只有alpha通道很重要).然后,它使用“清除混合”模式绘制文本,该模式简单地将上下文的所有通道设置为0,包括Alpha通道.

游乐场演示:

  1. let root = UIView(frame: CGRectMake(0,400,400))
  2. root.backgroundColor = .blueColor()
  3. XCPlaygroundPage.currentPage.liveView = root
  4.  
  5. let image = UIImage(named: "Kaz-256.jpg")
  6. let imageView = UIImageView(image: image)
  7. root.addSubview(imageView)
  8.  
  9. let label = InvertedMaskLabel()
  10. label.text = "Label"
  11. label.frame = imageView.bounds
  12. label.font = .systemFontOfSize(40)
  13. imageView.maskView = label

结果:

猜你在找的iOS相关文章