您好我正在制作一个示例应用,其中我想创建一个方块,我使用以下代码
- (void)viewDidLoad {
[super viewDidLoad];
[self drawRect:CGRectMake(0, 0, 300, 200)];
[[self view] setNeedsDisplay];
}
- (void) drawRect:(CGRect)rect
{
NSLog(@"drawRect");
CGFloat centerx = rect.size.width/2;
CGFloat centery = rect.size.height/2;
CGFloat half = 100/2;
CGRect theRect = CGRectMake(-half, -half, 100, 100);
// Grab the drawing context
CGContextRef context = UIGraphicsGetCurrentContext();
// like Processing pushMatrix
CGContextSaveGState(context);
CGContextTranslateCTM(context, centerx, centery);
// Uncomment to see the rotated square
//CGContextRotateCTM(context, rotation);
// Set red stroke
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
{
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1.0);
}
// Draw a rect with a red stroke
CGContextFillRect(context, theRect);
CGContextStrokeRect(context, theRect);
// like Processing popMatrix
CGContextRestoreGState(context);
[[self view] setNeedsDisplay];
}
但屏幕上没有任何内容,不知道问题是什么。当我调试它时,CGContextRef上下文总是0x0,我不知道为什么它的0x0总是在我的代码中丢失了一些东西。
答案 0 :(得分:4)
看起来你正在尝试绘制UIViewController
的子类。您需要子类UIView
来覆盖drawRect:
方法,然后使用有效的图形上下文自动调用该方法。你自己几乎从不称呼这种方法。
答案 1 :(得分:1)
引用Apple文档:
“要在iOS应用程序中绘制到屏幕,您需要设置一个UIView对象并实现其drawRect:方法来执行绘图。当视图在屏幕上可见并且其内容需要更新时,将调用视图的drawRect:方法。调用自定义drawRect:方法,视图对象自动配置其绘图环境,以便您的代码可以立即开始绘制。作为此配置的一部分,UIView对象为当前绘图环境创建图形上下文(CGContextRef opaque类型)。通过调用UIKit函数UIGraphicsGetCurrentContext在drawRect:方法中获取此图形上下文。“
因此,您的代码正在按计划进行,您只需要将其放在正确的位置即可。它需要位于View对象中。