它怎么知道的?当 UIColor 设置填充并且 UIGraphicsImageRendererContext 知道如何填充时
How does it know? When UIColor sets fill and UIGraphicsImageRendererContext knows how to fill
我遇到了一个使用 UIGraphicsImageRender
在 Medium 上吸引导师的例子。示例代码如下:
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 20, height: 20))
let img = renderer.image { (ctx) in
let size = renderer.format.bounds.size
UIColor.red.setFill()
ctx.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
}
在上面的代码中,UIColor.red.setFill()
显然只使指定的颜色,即红色,准备好填充特定的形状。然而,神奇的是,作为 UIGraphicsImageRendererContext
的 ctx 似乎已经收到通知,它将用红色填充 CGRect
形状!
纯粹从这里的代码来看,我看不出UIColor
实例方法setFill()
和UIGraphicsImageRendererContext
实例方法fill(_: CGRect)
之间的联系。那么,它是怎么知道的呢? UIColor
设置填充时UIGraphicsImageRendererContext
如何填充?
谢谢。
Purely from the code here, I cannot see the connection between the UIColor instance method setFill() and the UIGraphicsImageRendererContext
它知道,因为当您说 setFill()
时,您 在 图形上下文中。
在您的代码处于 运行 的任何时刻,存在或不存在 当前图形上下文 。在图形图像渲染器的 image
闭包运行时,有一个 - 将用于形成图像的图形上下文。这就是在image
闭包中的意思。
因此,如果在此闭包中给出此命令和类似的(隐式)针对当前图形上下文的 UIColor 和 UIBezierPath 命令,将会成功。他们也会成功,比如说,一个 UIView draw(_:)
覆盖,因为在那一刻视图自己的图形上下文是当前的。
试着在 其他 的时候说 setFill()
,但是,您会看到一条消息抱怨 没有 当前图形上下文。
我遇到了一个使用 UIGraphicsImageRender
在 Medium 上吸引导师的例子。示例代码如下:
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 20, height: 20))
let img = renderer.image { (ctx) in
let size = renderer.format.bounds.size
UIColor.red.setFill()
ctx.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
}
在上面的代码中,UIColor.red.setFill()
显然只使指定的颜色,即红色,准备好填充特定的形状。然而,神奇的是,作为 UIGraphicsImageRendererContext
的 ctx 似乎已经收到通知,它将用红色填充 CGRect
形状!
纯粹从这里的代码来看,我看不出UIColor
实例方法setFill()
和UIGraphicsImageRendererContext
实例方法fill(_: CGRect)
之间的联系。那么,它是怎么知道的呢? UIColor
设置填充时UIGraphicsImageRendererContext
如何填充?
谢谢。
Purely from the code here, I cannot see the connection between the UIColor instance method setFill() and the UIGraphicsImageRendererContext
它知道,因为当您说 setFill()
时,您 在 图形上下文中。
在您的代码处于 运行 的任何时刻,存在或不存在 当前图形上下文 。在图形图像渲染器的 image
闭包运行时,有一个 - 将用于形成图像的图形上下文。这就是在image
闭包中的意思。
因此,如果在此闭包中给出此命令和类似的(隐式)针对当前图形上下文的 UIColor 和 UIBezierPath 命令,将会成功。他们也会成功,比如说,一个 UIView draw(_:)
覆盖,因为在那一刻视图自己的图形上下文是当前的。
试着在 其他 的时候说 setFill()
,但是,您会看到一条消息抱怨 没有 当前图形上下文。