核心图形仅绘制黑色

时间:2012-02-15 14:59:59

标签: iphone objective-c ios core-graphics

我正在尝试在iPhone上开发一款国际象棋游戏,并且已经陷入了一个微不足道的细节,但似乎无法超越它。谁能看到那件丢失的作品?

这是问题所在。当用户点击正方形时,它应该以一些褪色的颜色突出显示。实际上发生了什么,它只是绘制黑色,完全不管我设置的是什么颜色。

这是我得到的图像。黑色圆圈应为红色或任何颜色。 That black circle should be red!

在这里,注意我正在绘制的UIView是在棋子视图的后面。怀疑它很重要,但我想完成。

Notice the black circle here is behind the pawn

最后,图层的代码:

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

-(void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    CGContextSetRGBStrokeColor(context, 255.0, 0.0, 0.0, 1.0);

    if (rowSelected && colSelected)
    {
        int gridsize = (self.frame.size.width / 8);
        int sx = (colSelected-1) * gridsize;
        int sy = (rowSelected-1) * gridsize;
        int ex = gridsize;
        int ey = gridsize;

        CGContextFillEllipseInRect(context, CGRectMake(sx,sy,ex,ey));
    }
}
// Handles the start of a touch
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    int gridsize = (self.frame.size.width / 8);
    // Position of touch in view
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint loc = [touch locationInView:self.superview];
    int x = loc.x / gridsize;
    int y = loc.y / gridsize;

    rowSelected = y + 1;
    colSelected = x + 1;

    [self setNeedsDisplay];
}

我尝试了很多东西,使用1而不是255,玩alpha等等,但除了纯黑色之外我什么都得不到。

编辑:

此外,这是该视图的超级视图的代码:

@implementation ChessBoard

-(id)initWithFrame:(CGRect)frame
{
    if (self != [super initWithFrame:frame])
        return self;

    int SQUARE_SIZE = frame.size.width / 8;

    currentSet = BW;

    UIImage *img = [UIImage imageNamed:@"board.png"];
    background = [[UIImageView alloc] initWithImage:img];
    [background setFrame:frame];
    [self addSubview:background];


    overlay = [[ChessBoardOverlay alloc] initWithFrame:frame];
    [self addSubview:overlay];

3 个答案:

答案 0 :(得分:0)

也许你应该这样陈述你的颜色:
CGContextSetRGBStrokeColor(context, 255.0/255.0f, 0.0/255.0f, 0.0/255.0f, 1.0f);

这件事发生在我身上一次使用:

[UIColor colorWithRed:12.0/255.0f green:78.0/255.0f blue:149.0/255.0f alpha:1.0f];

直到我添加了/255.0f才能使用。

答案 1 :(得分:0)

在函数CGContextSetRGBStrokeColor中,颜色组件值(红色,绿色,蓝色,alpha)必须介于0和1之间。由于您假设255是颜色的最大值,您需要将所有颜色分开颜色分量值乘以255.0f。

CGContextSetRGBStrokeColor(context, 255.0f/255.0f, 0.0/255.0f, 0.0/255.0f, 1.0);

答案 2 :(得分:0)

你说你正在绘制图层......但是CALayer没有drawRect:方法,它有drawInContext:

我猜想通过尝试调用drawRect:在你的CALayer实例中,真正的上下文没有被正确构建,或者它有但是你没有绑定它。