如何更改 Mask View 的颜色?

How to change the color of the Mask View?

我不确定我是否正确理解了 Masking 的概念,但我正在尝试在他们的应用程序中重新创建 Twitter 徽标扩展动画:

Twitter Logo expansion

到目前为止我有这个代码:

class LaunchScreenViewController: UIViewController {
    var mask: CALayer!

    override func viewDidLoad() {
        setUpViewMask()
    }

    func setUpViewMask() {
        mask = CALayer()
        mask.contents = UIImage(named: "logo_mask")?.cgImage
        mask.contentsGravity = kCAGravityResizeAspect
        mask!.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
        mask!.anchorPoint = CGPoint(x: 0.5, y: 0.5)
        mask!.position = CGPoint(x: view.frame.size.width/2, y: view.frame.size.height/2)
        view.layer.backgroundColor = UIColor(red: 70/255, green: 154/255, blue: 233/255, alpha: 1).cgColor
        view.layer.mask = mask
    }
}

这个输出是:

如何将黑色背景变为蓝色?我试过了,但似乎没有用:

view.layer.backgroundColor = UIColor(red: 70/255, green: 154/255, blue: 233/255, alpha: 1).cgColor

创建一个应用蒙版的中间层。将视图的背景设置为所需的背景,并将中间层的背景颜色设置为您希望蒙版出现的颜色。像这样,

view.backgroundColor = UIColor(red: 70/255, green: 154/255, blue: 233/255, alpha: 1)  // set background of the view portion that do not include mask


let parentLayer = CALayer()
parentLayer.frame = view.bounds
parentLayer.backgroundColor = UIColor.white.cgColor // sets background of mask
view.layer.addSublayer(parentLayer) 

let mask = CALayer()
mask.contents = UIImage(named: "twitter.png")?.cgImage
mask.contentsGravity = kCAGravityResizeAspect
mask.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
mask.anchorPoint = CGPoint(x: 0.5, y: 0.5)
mask.position = CGPoint(x: view.frame.size.width/2, y: view.frame.size.height/2)
parentLayer.mask = mask

这可以通过更改 appDelegate 的 window...

的背景颜色来实现
let appDelegate  = UIApplication.shared.delegate as! AppDelegate
appDelegate.window!.backgroundColor = UIColor.blue