iPhone очистить CGContext - PullRequest
       11

iPhone очистить CGContext

5 голосов
/ 19 января 2010

Я создаю круг с красивой тенью с помощью этого кода (я использую MonoTouch.net для iPhone, ответы Objective-C, конечно, хороши)

        UIGraphics.PushContext (ctx);
        SizeF shadowSize = new SizeF (0f, -3f);
        ctx.SetRGBFillColor (194f / 255f, 212f / 255f, 238f / 255f, 1f);
        ctx.SetAllowsAntialiasing (true);
        ctx.SetShadowWithColor (shadowSize, 20, new CGColor (0.9f, 0.7f));
        RectangleF area = new RectangleF (35f, 15f, 210f, 210f);
        ctx.FillEllipseInRect (area);
        UIGraphics.PopContext ();

Тогда я хочу добавить к нему дугу и линии. Когда я это делаю, цвета, тени и т. Д., Кажется, остаются рядом? Как мне начать все сначала, рисуя мой UIView? (Это все в том же UIView; я создаю изображение)

Ответы [ 2 ]

13 голосов
/ 19 января 2010

Если вы хотите очистить все, что нарисовано, чтобы у вас был чистый холст, попробуйте CGContextClearRect, прежде чем что-либо рисовать.

Но я думаю, вы имеете в виду, что вы хотите, чтобы тень, заливка и т. Д. Относились только к этому эллипсу, а не к тем вещам, которые вы рисуете впоследствии. Для этого вы хотите снова вызвать те же методы установки состояния, но с другими аргументами. Например, CGContextSetShadowWithColor ожидает цвет тени. Но если вы передадите NULL для этого аргумента, он отключит теневое копирование.

См. Также документацию CGContextSetShadow , в которой есть примечание обо всех способах отключения теней. Выберите лучший для вас.

Я думаю, что ваша главная проблема в том, что вы не пользуетесь превосходной документацией Apple. Я понял, что MonoTouch.net по существу отображает API Objective C на модули .NET с одинаковыми или идентичными именами символов. Таким образом, благодаря быстрому поиску в Google вы сможете найти соответствующую документацию в справочной библиотеке iPhone OS.

1 голос
/ 19 января 2010

Прежде чем мы начнем рисовать, сохраняем состояние:

CGContextSaveGState(ctx);

Затем, после того как мы закончим, верните состояние к тому, что было в начале:

CGContextRestoreGState(ctx);
...