使用图层蒙版使部分 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 大小的中心。图像的非透明部分应该是遮罩,应该是后面的视图(在本例中为红色)。屏幕的其余部分应该被蓝色覆盖。
我该怎么做?
能分享一下你的照片吗?
编辑:
看完演示代码。您的方法将不一样。他的背景是一张图片。
尝试以下操作:
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!
我有一个背景颜色为红色的 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 大小的中心。图像的非透明部分应该是遮罩,应该是后面的视图(在本例中为红色)。屏幕的其余部分应该被蓝色覆盖。
我该怎么做?
能分享一下你的照片吗?
编辑:
看完演示代码。您的方法将不一样。他的背景是一张图片。
尝试以下操作:
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!