Откуда это знать? Когда UIColor устанавливает заливку, а UIGraphicsImageRendererContext знает, как заливать

Я наткнулся на пример использования 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()очевидно только делает указанный цвет, то есть красный, готовым заполнить определенную форму. Однако волшебным образом кажется, что ctx, который является a, получил уведомление о том, что он заполнит CGRect форма с красным цветом!

Чисто из кода здесь я не вижу связи между методом экземпляра setFill() и метод экземпляра fill(_: CGRect). Итак, как это узнать? Как UIGraphicsImageRendererContext заполняется, когда UIColor наборы заполнить?

Спасибо.

1 ответ

Решение

Чисто из кода здесь я не вижу связи между методом экземпляра UIColor setFill () и UIGraphicsImageRendererContext

Он знает, потому что когда вы говорите, вы находитесь в графическом контексте.

В каждый момент, когда ваш код выполняется, текущий графический контекст либо есть, либо нет . Во время закрытия средства рендеринга графического изображения есть одно - графический контекст, который будет использоваться для формирования изображения. Вот что значит быть в закрытие.

Следовательно, эта и подобные команды UIColor и UIBezierPath, которые (неявно) направлены на текущий графический контекст, будут успешными, если заданы в этом закрытии. Они также преуспеют, скажем, в UIView переопределить, потому что в этот момент собственный графический контекст представления является текущим.

Попробуйте сказать однако в другое время вы увидите сообщение с жалобой на отсутствие текущего графического контекста.

Другие вопросы по тегам