Ответ 1
Похоже, что CoreGraphics внутренне удваивает пиксели, а затем отправляет их на GPU,
В значительной степени. Точнее (по крайней мере, по духу):
- UIKit делает
CGBitmapContext
размер ваших границ обзора, в пикселях устройства - Он делает этот контекст текущим контекстом
- Вы рисуете
CGImage
в этом контексте - ... поэтому CG должен перемасштабировать исходное изображение и коснуться всех целевых пикселей.
- После того, как вы закончите рисование, UIKit создает
CGImage
из контекста растрового изображения. - и присваивает его содержимому уровня представления.
CGImage, который я создаю, должен быть хорошим для непосредственного перехода на GPU.
Если вы хотите, чтобы это произошло, вам нужно сообщить системе об этом, вырезав некоторые из приведенных выше шагов.
(Нет связи между UIKit, CoreAnimation и CoreGraphics, которая обеспечивает "быстрый путь", как вы ожидаете.)
Самый простой способ - сделать UIImageView
и установить его image
на UIImage
, завернув ваш CGImageRef
.
Или, установите view.layer.contents
на CGImageRef
. (И не забудьте переопределить -drawRect:
, а не вызвать -setNeedsDisplay
, и убедитесь, что contentMode
не UIViewContentModeRedraw
. Легче просто использовать UIImageView
.)