Uiview `UIBezierPath.fill()`不填充'draw()的内部`
我正在从半透明的Uiview `UIBezierPath.fill()`不填充'draw()的内部`,uiview,uikit,core-graphics,Uiview,Uikit,Core Graphics,我正在从半透明的UIView中剪切出一个矩形。当我使用UIRectFill()时,它会按预期工作。但是,当我创建带有圆角的UIBezierPath时,fill()似乎什么都不做。奇怪的是,在同一条路径上调用stroke(),效果很好 有效: override func draw(_ rect: CGRect) { screenColor.set() UIRectFill(self.bounds) let viewfinderRect = CGRect(x: 50, y:
UIView
中剪切出一个矩形。当我使用UIRectFill()
时,它会按预期工作。但是,当我创建带有圆角的UIBezierPath
时,fill()
似乎什么都不做。奇怪的是,在同一条路径上调用stroke()
,效果很好
有效:
override func draw(_ rect: CGRect) {
screenColor.set()
UIRectFill(self.bounds)
let viewfinderRect = CGRect(x: 50, y: 50, width: 100, height: 100)
UIColor.clear.setFill()
UIRectFill(viewfinderRect) //Works!
}
不起作用:
override func draw(_ rect: CGRect) {
screenColor.set()
UIRectFill(self.bounds)
let viewfinderRect = CGRect(x: 50, y: 50, width: 100, height: 100)
let path = UIBezierPath(roundedRect: viewFinderRect, cornerRadius: 10.0)
UIColor.clear.setFill()
path.fill() // Does not work!
//path.stroke() // Works!
}
你不是在用同样的东西画画 报告说: 使用当前图形上下文的填充颜色和kCGBlendModeCopy混合模式填充指定的矩形 (在Swift中,此混合模式的名称为。) 使用此混合模式时,指定的填充颜色将复制到上下文中,替换下面的任何颜色。由于填充颜色清晰,因此可以在视图中有效地剪切一个孔 但是,当您调用
path.fill()
时,它在上下文中使用默认的混合模式,即CGBlendMode.normal
。它将填充颜色绘制在上下文中已有的内容上。由于填充颜色是清晰的,因此没有可见效果
试试这个:
UIColor.clear.setFill()
path.fill(with: CGBlendMode.copy, alpha: 1.0)
或者这个:
UIColor.clear.setFill()
UIGraphicsGetCurrentContext()?.setBlendMode(CGBlendMode.copy)
path.fill()
或者,您甚至可以在一行中完成:
path.fill(with: CGBlendMode.clear, alpha: 1.0)
你不是在用同样的东西画画 报告说: 使用当前图形上下文的填充颜色和kCGBlendModeCopy混合模式填充指定的矩形 (在Swift中,此混合模式的名称为。) 使用此混合模式时,指定的填充颜色将复制到上下文中,替换下面的任何颜色。由于填充颜色清晰,因此可以在视图中有效地剪切一个孔 但是,当您调用
path.fill()
时,它在上下文中使用默认的混合模式,即CGBlendMode.normal
。它将填充颜色绘制在上下文中已有的内容上。由于填充颜色是清晰的,因此没有可见效果
试试这个:
UIColor.clear.setFill()
path.fill(with: CGBlendMode.copy, alpha: 1.0)
或者这个:
UIColor.clear.setFill()
UIGraphicsGetCurrentContext()?.setBlendMode(CGBlendMode.copy)
path.fill()
或者,您甚至可以在一行中完成:
path.fill(with: CGBlendMode.clear, alpha: 1.0)