我在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; } }
不幸的是,您提出的问题非常糟糕- 您尚未说出您实际上在试图做什么!但是,看起来好像您正在尝试使用蒙版在图像视图中打一个矩形孔。如果是这样,您的代码至少具有三个巨大的缺陷。
您的代码无法正常工作的原因之一是遮罩是基于透明度而不是颜色。您使用的是不透明的白色和不透明的黑色,它们都是不透明的,因此两者之间没有区别。您需要使用以下两种颜色:
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:
CGImage
maskLayer.contents = maskImage.CGImage
最后一个确实是杀手er,因为如果您将contentsUIImage 设置为UIImage而不提取其CGImage图像,则图像将无法 静默 进入该层。没有错误消息,没有崩溃-也没有图像。
contents
在您的代码中进行了三个更正,我能够使蒙版在图像中打一个矩形孔。因此,如果这是您的目的,那么这些更改将实现它。