使用图层蒙版使部分 UIView 透明?

Use Layer Mask to make parts of the UIView transparent?

我有一个背景颜色为红色的 UIViewController self.view。我想在屏幕中央放置一个 UIImageView。 UIImageView 显示覆盖整个屏幕,其背景颜色应为蓝色。当作为遮罩时,中心应该有一个 100 x 100 的图像。该图像是具有透明和非透明部分的png。使用此图像作为蒙版,通过此 png 的非透明部分应该可以看到背景。它应该是这样的:

Here 是在应用程序中的演示。

这是我所做的:

self.view.backgroundColor = UIColor.redColor()
let imageView = UIImageView(frame: self.view.frame)
imageView.backgroundColor = UIColor.blueColor()
let maskImage: UIImage = UIImage(named: "twitterIcon")!
mask = CALayer()
mask?.contents = maskImage.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: imageView.frame.size.width/2, y: imageView.frame.size.height/2)
imageView.layer.mask = mask!
self.imageView = imageView
self.view.addSubview(imageView)

结果如下:

我想达到完全相反的效果。图像应该位于 100 x 100 大小的中心。图像的非透明部分应该是遮罩,应该是后面的视图(在本例中为红色)。屏幕的其余部分应该被蓝色覆盖。

编辑:Here is the image I use.

我该怎么做?

能分享一下你的照片吗?

编辑:

看完演示代码。您的方法将不一样。他的背景是一张图片。

尝试以下操作:

1- 在您的 App Delegate 中将 window 背景色设置为蓝色。

self.window?.backgroundColor = UIColor.blueColor()

用以下代码替换您的代码:

self.view.backgroundColor = UIColor.redColor()
    let maskImage: UIImage = UIImage(named: "twitterIcon")!
    mask = CALayer()
    mask?.contents = maskImage.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: self.view.frame.size.width/2, y: self.view.frame.size.height/2)
    self.view.layer.mask = mask!