UIView.mask设置颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIView.mask设置颜色相关的知识,希望对你有一定的参考价值。

我有一个50像素的UIView,我正在设置我的超视图的面具。

let squareView = UIView(frame...)

self.view.mask = squareView

结果是50px方形透明区域,但它周围的遮蔽区域的颜色总是白色。如何将透明方块周围遮罩区域的颜色更改为黑色?

 _______________
|               |    
|    <-------------- Masked area that I would like to change the color of
|               |
|      000000   |
|      000000 <-------- squareView: becomes transparent as expected
|      000000   |
|      000000   |
|               |
|               |
|               |
|_______________|
答案

我认为这是一个代码片段,可以展示您想要的效果。您应该能够将它作为Xcode模板创建的视图控制器的viewDidLoad()方法粘贴到新的“单视图”ios项目中。

我需要一些方法来设置掩码视图的内容而不创建UIView的子类(因为我很懒)所以我的示例创建了一个图像(其alpha通道大部分为1.0,具有100x100平方的清晰alpha通道) 。我将其设置为蒙版视图的内容。

最后的计时器只是循环通过外观的一堆颜色,因为......这很有趣。

override func viewDidLoad() {
      super.viewDidLoad()
      self.view.backgroundColor = UIColor.blue

      let overallView = UIView(frame: CGRect(x:100, y:100, width:300, height:300))
      overallView.backgroundColor = UIColor.green

      // Draw a graphics with a mostly solid alpha channel
      // and a square of "clear" alpha in there.
      UIGraphicsBeginImageContext(overallView.bounds.size)
      let cgContext = UIGraphicsGetCurrentContext()
      cgContext?.setFillColor(UIColor.white.cgColor)
      cgContext?.fill(overallView.bounds)
      cgContext?.clear(CGRect(x:100, y:100, width: 100, height: 100))
      let maskImage = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()

      // Set the content of the mask view so that it uses our
      // alpha channel image
      let maskView = UIView(frame: overallView.bounds)
      maskView.layer.contents = maskImage?.cgImage
      overallView.mask = maskView

      self.view.addSubview(overallView)

      var hue = CGFloat(0)
      Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true) {
          (_) in
          let color = UIColor(hue: hue, saturation: 1.0, brightness: 1.0, alpha: 1.0)
          hue = hue + (1.0/20);
          if hue >= 1.0 { hue = 0 }

          overallView.backgroundColor = color
      }
  }

以上是关于UIView.mask设置颜色的主要内容,如果未能解决你的问题,请参考以下文章

Typora设置自定义代码颜色

Alfred常见使用

GLSL将颜色数据从片段着色器发送到顶点着色器似乎总是等于0

Android用代码给TextView中间部分设置不同的颜色

Android用代码给TextView中间部分设置不同的颜色

设置 EditText 光标颜色