我在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
:
maskLayer.contents = maskImage.CGImage
最后一个确实是杀手er,因为如果您将contents
UIImage 设置为UIImage而不提取其CGImage
图像,则图像将无法 静默
进入该层。没有错误消息,没有崩溃-也没有图像。
在您的代码中进行了三个更正,我能够使蒙版在图像中打一个矩形孔。因此,如果这是您的目的,那么这些更改将实现它。
问题内容: 在ObjectiveC中,我会这样做 但是我在Swift中尝试了所有这样的选择,但都没有成功 它显示一个错误: 使用未解析的标识符“ AlwaysOriginal” 我怎么做? 问题答案: 那将是正确的语法: (对于 Swift 3.x 或 Swift 4 ) (对于 Swift 2.x ) 但您也可以使用此“快捷方式”:
问题内容: 我想以编程方式创建由纯色填充的UIImage。有人知道如何在Swift中执行此操作吗? 问题答案: 另一个与 Swift 2.2 兼容的不错的解决方案是以这种方式在UIImage中创建另一个构造函数: 这样,您可以通过以下方式创建自定义彩色图像: 或者,可以选择创建具有自定义尺寸的图像: 斯威夫特3.0
屏蔽与使能中断 根据操作系统原理的知识,我们知道如果没有在硬件级保证读内存-修改值-写回内存的原子性,我们只能通过复杂的软件来实现同步互斥操作。但由于有开关中断和test_and_set_bit等原子操作机器指令的存在,使得我们在实现同步互斥原语上可以大大简化。 在ucore中提供的底层机制包括中断屏蔽/使能控制等。kern/sync.c中实现的开关中断的控制函数local_intr_save(x
问题内容: 当前,我们通常记录所有进出我们系统的XML文档,其中一些包含明文密码。我们希望能够配置执行此操作的logback logger / appender进行某种模式匹配或类似操作,并且如果它检测到存在替换它的密码(很可能带有星号)。注意,我们不想过滤掉日志条目,我们想掩盖其中的一部分。我很乐意提供有关如何通过注销执行此操作的建议。谢谢。 问题答案: 0.9.27版本的logback引入了替
我有一个数组,我想屏蔽它,这样我就可以保持它的形状,即,不删除屏蔽的元素。 例如在此代码中 打印输入是对未屏蔽元素进行上述数学运算的结果,并返回一个没有屏蔽元素的1D数组。
我有一个图像与红色,绿色,蓝色通道和图像的二进制版本。 我只想从彩色图像中选择二进制为1的像素。 我知道这应该适用于,甚至适用于,但由于我对Matlab还很陌生,即使在阅读了函数的文档之后,我也搞不清楚如何做到这一点。