Прежде всего, если вы делаете это из среды iOS, я думаю, что вы правы.В документации четко сказано, что единственный способ получить CGContextRef
- это
CGContextRef ctx = UIGraphicGetCurrentContext();
. Затем вы используете этот контекст для создания CGLayer
с
CGLayerRef layer = CGLayerCreateWithContext(ctx, (CGSize){0,0}, NULL);
И если вы хотитечтобы нарисовать на этом слое, вы должны нарисовать его с контекстом, который вы получаете от слоя.(Это несколько отличается от контекста, который вы передали ранее для создания CGLayer).Я предполагаю, что CGLayerCreateWithContext
сохраняет информацию, которую он может получить из переданного контекста, но не все.(Одним из примеров является информация о ColorSpace, которую необходимо переопределить при заполнении чего-либо контекстом из CGLayer
).
Вы можете получить ссылку на контекст CGLayer из функции CGLayerGetContext()
и использоватьчто рисовать.
CGContextRef layerCtx = CGLayerGetContext(layer);
CGContextBeginPath(layerCtx);
CGContextMoveToPoint(layerCtx, -10, 10);
CGContextAddLineToPoint(layerCtx, 100, 10);
CGContextAddLineToPoint(layerCtx, 100, 100);
CGContextClosePath(layerCtx);
Одна вещь, которую я обнаружил, это то, что когда вы рисуете что-то за кадром, оно автоматически обрезает вещь за кадром.(имеет смысл, поэтому он не рисует вещи, которые не видны), но когда вы перемещаете слой (с помощью преобразования матрицы).Обрезанный путь не отображается (отсутствует).
И последнее: если вы сохраните ссылку на слой в переменную, а затем захотите нарисовать ее, вы можете использовать метод CGContextDrawLayerAtPoint()
, например * 1020.*
CGContextDrawLayerAtPoint(ctx, (CGPoint) {newPointX, newPointY}, layer);
Это будет своего рода «пометить» или «нарисовать» слой с этой новой точкой PointX и новой координатой PointY.
Я надеюсь, что ответьте на ваш вопрос, если нет, дайте мне знать.1025 *