Сохранение и восстановление CGContext

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

9
задан nevan king 26 February 2013 в 16:23
поделиться

2 ответа

Разве вы не хотите сначала сохранить, а затем восстановить? Если вы восстанавливаете перед сохранением, тогда нет контекста для восстановления, и вы получите недостаточное заполнение.

Вот как я это использовал:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextClipToRect(context, CGRectMake(stripe[i][8], stripe[i][9], stripe[i][10], stripe[i][11]));
CGContextDrawLinearGradient(context, gradient, CGPointMake(15, 5), CGPointMake(15, 25), 0);
CGContextRestoreGState(context);

или:

  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSaveGState(context);
  CGContextAddRect(context, originalRect);
  CGContextClip(context);

  [self drawInRect:rect];

  CGContextRestoreGState(context);

Может быть, вы пытаетесь сделать что-то еще.

7
ответ дан 4 December 2019 в 08:33
поделиться

Думаю, вы неправильно интерпретируете то, что делают CGContextSaveGState () и CGContextRestoreGState () . Они помещают текущее состояние графики в стек и извлекают его, позволяя преобразовать текущее пространство чертежа, изменить стили линий и т. Д., А затем восстановить состояние до того, как оно было до установки этих значений. Он не хранит элементы чертежа, такие как пути.

Из документации по CGContextSaveGState () :

Каждый графический контекст поддерживает стек графических состояний. Обратите внимание, что не все аспекты текущего чертежа окружающая среда являются элементами состояние графики. Например, текущий путь не считается частью состояние графики и поэтому не сохраняется при вызове Функция CGContextSaveGState () .

Стек состояния графики должен быть сброшен в начале вашего drawRect: , вот почему вы получаете ошибки при попытке вывести графику состояние вне стека. Поскольку вы не нажали ни одного, оторваться не было. Все это означает, что вы не можете сохранить свой рисунок в виде графического состояния в стеке, а затем восстановить его позже.

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

18
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: