我在让主题电话工作时遇到问题。下面的测试应绘制两个橙色和一个绿色矩形。
以下是我对以下代码的理解......
最后一个矩形应该是橙色,但是是绿色,告诉我我修改了原始上下文
思想?
- (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();
}
答案 0 :(得分:1)
UIGraphicsPushContext()
不会为您创建新的上下文,它只会将您传递的上下文推送到堆栈上。所以在你执行UIGraphicsPushContext(UIGraphicsGetCurrentContext());
之后,你有两个深度的图形上下文堆栈,但它上面的两个项目都是相同的上下文,是你的视图为你设置的上下文。
您需要实际创建要推送的上下文,最有可能使用UIGraphicsBeginImageContext()
。然后,您可以从该上下文中获取图像并将其放入视图中。