试图找出我在这里做错了什么。尝试了几件事,但是我从没在屏幕上看到那个难以捉摸的矩形。现在,这就是我想要做的-只需在屏幕上绘制一个矩形即可。
我在除CGContextSetRGBFillColor()之外的所有内容上都获得了“无效的上下文”。在那之后获取上下文对我来说似乎是错误的,但是我并不在家看我昨晚使用的示例。
我是否也弄乱了其他东西?我真的很想今晚至少完成这么多工作...
- (id)initWithCoder:(NSCoder *)coder
{
CGRect myRect;
CGPoint myPoint;
CGSize mySize;
CGContextRef context;
if((self = [super initWithCoder:coder])) {
NSLog(@"1");
currentColor = [UIColor redColor];
myPoint.x = (CGFloat)100;
myPoint.y = (CGFloat)100;
mySize.width = (CGFloat)50;
mySize.height = (CGFloat)50;
NSLog(@"2");
// UIGraphicsPushContext (context);
NSLog(@"3");
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, currentColor.CGColor);
CGContextAddRect(context, myRect);
CGContextFillRect(context, myRect);
}
return self;
}
谢谢,
肖恩。
最佳答案
从基于 View 的模板开始,创建一个名为 Drawer 的项目。将UIView类添加到您的项目。将其命名为 SquareView (.h和.m)。
双击 DrawerViewController.xib 在“界面生成器”中将其打开。使用类弹出菜单,在身份检查器(命令4)中将那里的通用 View 更改为 SquareView 。保存并返回 Xcode 。
将此代码放在 SquareView.m 文件的drawRect:方法中,以绘制一个大的,弯曲的,空的黄色矩形和一个小的绿色,透明的正方形:
- (void)drawRect:(CGRect)rect;
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0); // yellow line
CGContextBeginPath(context);
CGContextMoveToPoint(context, 50.0, 50.0); //start point
CGContextAddLineToPoint(context, 250.0, 100.0);
CGContextAddLineToPoint(context, 250.0, 350.0);
CGContextAddLineToPoint(context, 50.0, 350.0); // end path
CGContextClosePath(context); // close path
CGContextSetLineWidth(context, 8.0); // this is set from now on until you explicitly change it
CGContextStrokePath(context); // do actual stroking
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.5); // green color, half transparent
CGContextFillRect(context, CGRectMake(20.0, 250.0, 128.0, 128.0)); // a square at the bottom left-hand corner
}
您不必调用此方法即可进行绘制。当程序启动且NIB文件被激活时,您的 View Controller 将告知 View 至少绘制一次。