2012-02-15 2 views
0

Я пытаюсь разработать шахматную игру на 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, играя с альфа и т.д., но я не может получить ничего, кроме сплошного черного.

EDIT:

Кроме того, вот код надтаблицы этой точки зрения в:

@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

Вы пробовали использовать 'CGContextSetRGBFillColor' –

+0

Нет, но все. О, я знал, что это будет что-то вроде этого. – jakev

+1

Значения цвета имеют диапазон от «0.0» до «1.0», а не от «0.0» до «255.0» – JustSid

ответ

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, чтобы это могло сработать.

0

В функции CGContextSetRGBStrokeColor значения цветовой компоненты (красный, зеленый, синий, альфа) должны быть между 0 и 1. Поскольку вы считаете, что 255 является максимальным для цвета, вам необходимо разделить все ваши значения цветовых компонентов на 255.0f.

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

Вы говорите, что вы рисуете к слою ... но CALayer не имеет DrawRect: метод, он имеет drawInContext:

Я предположил бы, пытаясь вызвать DrawRect: в вашем экземпляр CALayer, что истинный контекст не был построен правильно или он имеет, но вы не привязываетесь к нему.

Смежные вопросы