CGContextFillRect没有绘制矩形?

时间:2011-08-18 03:28:51

标签: iphone core-graphics

我有这段代码:

CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, darkColor);
CGContextFillRect(context, CGRectMake(18, 62, 66, 66));

我只是将它放在我视图的viewdidload方法中,但我的视图与以前没什么不同。我试过让它变得非常大而且明亮的红色,但它只是没画画。我需要一些其他初始化代码吗?

编辑:在给出给我的答案后,我现在在我的veiwdidload中有这个:

[self.view addSubview:[[[imageBackground alloc] init] autorelease]];

并在imageBackground.m中:

@implementation imageBackground

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.opaque = YES;
        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
    darkColor = [[UIColor colorWithRed:255.0 green:0.0 blue:0.0 alpha:1.0] CGColor];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, darkColor);
    CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
}
@end

Imagebackground.h子类UIView:

#import <UIKit/UIKit.h>
@interface imageBackground : UIView
@end

但我仍然没有得到任何结果。

EDIT2:嗯,我自己解决了,但后来意识到progrmr已经告诉我如何解决它。我不得不使用[self.view addSubview:[[[imageBackground alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]];而不是普通的alloc init。

感谢glorifiedhacker提供了很多帮助!

2 个答案:

答案 0 :(得分:7)

您需要继承UIView(或其子类之一)并覆盖drawRect方法:

- (void)drawRect:(CGRect)rect {
    CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, darkColor);
    CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
}

以获得可以绘制的有效图形上下文。来自Apple的documentation on UIView

  

根据需要查看绘图。首次显示视图时   或者当全部或部分因布局变化而变得可见时,   系统要求视图绘制其内容。对于包含的视图   使用UIKit或Core Graphics的自定义内容,系统调用   view的drawRect:方法。你实现这个方法是   负责将视图的内容绘制到当前图形中   上下文,由系统在调用之前自动设置   这种方法。这会创建一个静态的视觉表示   视图的内容随后可以显示在屏幕上。

答案 1 :(得分:1)

没有子类化的最简单方法是整个代码的过程。

void DrawRectFrame(CGContext c, CGRect rc)
{
    CGContextMoveToPoint(c,     rc.origin.x,                  rc.origin.y);
    CGContextAddLineToPoint(c,  rc.origin.x+rc.size.width,    rc.origin.y);

    CGContextMoveToPoint(c,     rc.origin.x+rc.size.width,    rc.origin.y);
    CGContextAddLineToPoint(c,  rc.origin.x+rc.size.width,    rc.origin.y+rc.size.height);

    CGContextMoveToPoint(c,     rc.origin.x+rc.size.width,    rc.origin.y+rc.size.height);
    CGContextAddLineToPoint(c,  rc.origin.x,                   rc.origin.y+rc.size.height);

    CGContextMoveToPoint(c,     rc.origin.x,                   rc.origin.y+rc.size.height);
    CGContextAddLineToPoint(c,  rc.origin.x,                   rc.origin.y);
}