我正在尝试在iPhone上开发一款国际象棋游戏,并且已经陷入了一个微不足道的细节,但似乎无法超越它。谁能看到那件丢失的作品?
这是问题所在。当用户点击正方形时,它应该以一些褪色的颜色突出显示。实际上发生了什么,它只是绘制黑色,完全不管我设置的是什么颜色。
这是我得到的图像。黑色圆圈应为红色或任何颜色。
在这里,注意我正在绘制的UIView是在棋子视图的后面。怀疑它很重要,但我想完成。
最后,图层的代码:
- (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];
答案 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实例中,真正的上下文没有被正确构建,或者它有但是你没有绑定它。