我在Swift编程。我想使用CALayer和UIImage来屏蔽图像。我正在以编程方式创建我的蒙版图像。创建的蒙版图像是一个UIImage,当我自己查看它时工作正常。但当我用它作为面具时,整个屏幕变成白色。我怀疑我的问题在于配置CALayer对象。我很感激你的帮助。谢谢!
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var maskImageSize = CGSizeMake(self.imageView.frame.width, self.imageView.frame.height)
UIGraphicsBeginImageContextWithOptions(maskImageSize, false, 0.0)
var color = UIColor(white: 1.0, alpha: 1.0)
color.setFill()
var rect = CGRectMake(0, 0, self.imageView.frame.width, self.imageView.frame.height)
UIRectFill(rect)
color = UIColor(white: 0.0, alpha: 1.0)
color.setFill()
rect = CGRectMake((self.imageView.frame.width/2)-100, (self.imageView.frame.height/2)-100, 200, 200)
UIRectFill(rect)
var maskImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
var maskLayer = CALayer()
maskLayer.contents = maskImage
maskLayer.contentsRect = CGRectMake(0, 0, self.imageView.bounds.width, self.imageView.bounds.height)
self.imageView.image = UIImage(named: "pictobemasked.png")
self.imageView.layer.mask = maskLayer;
}
}
答案 0 :(得分:12)
不幸的是,您已经相当严重地提出了问题 - 您还没有说出您实际上想要做的事情!但是,看起来好像你可能试图使用蒙版在图像视图中打出一个矩形孔。如果是这样,你的代码至少有三个巨大的缺陷。
您的代码无效的一个原因是掩码基于透明度而非颜色。你使用的是不透明的白色和不透明的黑色,它们都是不透明的,所以没有区别。你需要两种颜色:
var color = UIColor(white: 1.0, alpha: 1.0)
// ... and then, later ...
color = UIColor(white: 1.0, alpha: 0.0)
第二个问题是您的图层没有大小。你需要给它一个:
var maskLayer = CALayer()
maskLayer.frame = CGRectMake(
0, 0, self.imageView.bounds.width, self.imageView.bounds.height)
第三个也是最大的问题是你的面具图片永远不会进入你的面具层,因为你忘了提取它的CGImage
:
maskLayer.contents = maskImage.CGImage
最后一个真的是杀手,因为如果你将contents
设置为UIImage而不提取其CGImage
,则图像无法静默进入图层。没有错误消息,没有崩溃 - 也没有图像。
在你的代码中进行了这三个修正,我能够使掩模在图像中打出一个矩形孔。因此,如果这是您的目的,那么这些变化就会实现它。