0

我在让主题电话正常工作时遇到问题。下面的测试应该绘制两个橙色和一个绿色的矩形。

这是我对以下代码的理解...

  • 我在 50,50 处画了一个橙色矩形
  • 我在 200,200 处调用绘制 greenRect,发送当前上下文
  • 我将当前上下文推入堆栈,更改笔触颜色并在 100,100 处绘制一个绿色矩形
  • 我弹出应该恢复原始上下文的当前上下文(橙色笔触颜色)
  • 然后我画出最后一个应该是橙色的矩形

最后一个矩形应该是橙色的,但是是绿色的,告诉我我修改了原始上下文

想法?

- (void)drawRect:(CGRect)rect{

CGRect aRectangle=CGRectMake(50., 50., 40., 40.);
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle];
UIColor *strokeColor=[UIColor orangeColor];
[strokeColor setStroke];
[path stroke];

CGContextRef context=UIGraphicsGetCurrentContext();

[self drawGreenRect:context];

CGRect anotherRectangle=CGRectMake(100., 100., 40., 40.);
UIBezierPath *anotherPath=[UIBezierPath bezierPathWithRect:anotherRectangle];
[anotherPath stroke];

}

- (void)drawGreenRect:(CGContextRef)ctxt{

UIGraphicsPushContext(UIGraphicsGetCurrentContext());

CGRect aRectangle=CGRectMake(200., 200., 40., 40.);
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle];
UIColor *strokeColor=[UIColor greenColor];
[strokeColor setStroke];
[path stroke];

 UIGraphicsPopContext();

}

4

1 回答 1

1

UIGraphicsPushContext()不会为您创建新的上下文,它只是将您传递的上下文推送到堆栈中。所以在你这样做之后UIGraphicsPushContext(UIGraphicsGetCurrentContext());,你有一个图形上下文堆栈两层,但它上面的两个项目都是相同的上下文,即你的视图为你设置​​的上下文。

您需要实际创建一个要推送的上下文,很可能使用UIGraphicsBeginImageContext(). 然后,您可以从该上下文中获取图像并将其放入您的视图中。

于 2012-09-11T22:35:02.320 回答