代码之家  ›  专栏  ›  技术社区  ›  Ian Vink

iPhone清除cgContext

  •  5
  • Ian Vink  · 技术社区  · 15 年前

    我用这段代码创建了一个带有漂亮阴影的圆圈(我在iPhone上使用MonoTouch.net,客观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 回复  |  直到 10 年前
        1
  •  13
  •   easeout    14 年前

    如果你想清除所有画出来的东西,这样你就有了一张空白的画布,那么试试看。 CGContextClearRect 在画任何东西之前。

    但我认为你的意思是你希望阴影,填充颜色等只适用于椭圆,而不是你以后画的东西。为此,您需要再次调用相同的状态设置方法,但使用不同的参数。例如, CGContextSetShadowWithColor 需要阴影颜色。但是如果你通过 NULL 对于该参数,它将禁用阴影。

    也见 CGContextSetShadow documentation ,其中有一个关于禁用阴影的所有方法的注释。为你挑选最好的。

    我认为你的主要问题是你没有充分利用苹果的优秀文档。我认为MonoTouch.net本质上是将Objective-C API映射到具有相似或相同符号名的.NET模块。因此,通过快速的谷歌搜索,您应该能够在iPhone OS参考库中找到相应的文档。

        2
  •  1
  •   elp jekmac    10 年前

    开始绘制之前,请保存状态:

    CGContextSaveGState(ctx);
    

    然后在我们完成之后,将状态恢复到最初的状态:

    CGContextRestoreGState(ctx);