我正在开发一个 Iphone 应用程序。我想要一个由看不见的小方块组成的网格。
我希望能够从代码中更改这些方块的颜色。
我怎样才能做到这一点?
附加信息:
网格是静态的(某种国际象棋网格),我需要能够更改其中给定方块的颜色。例如,将正方形 C3 的颜色更改为红色,将 E7 的颜色更改为绿色。
除了着色之外,我不想在正方形中放置任何内容。
我正在开发一个 Iphone 应用程序。我想要一个由看不见的小方块组成的网格。
我希望能够从代码中更改这些方块的颜色。
我怎样才能做到这一点?
附加信息:
网格是静态的(某种国际象棋网格),我需要能够更改其中给定方块的颜色。例如,将正方形 C3 的颜色更改为红色,将 E7 的颜色更改为绿色。
除了着色之外,我不想在正方形中放置任何内容。
您可以继承 UIView,添加一些数据结构来保存单元格信息并覆盖drawRect:方法。
像这样的东西:
// in view
-(void)drawCellAtRow:(int)row column:(int)column
{
// draw a cell
}
-(void)drawRect:(CGRect)rect
{
// determine which cells have to be drawn for this rect
// and draw them
}
-(void)changeCellAtRow:(int)row column:(int)column
{
// change cell info
// calculate rect to update
[self setNeedsDisplayInRect:dirtyRect];
}
// in view controller
-(void)eventHandler
{
[cellView changeCellAtRow:row column:column];
}
theView.backgroundColor = color;
当我想创建一个具有 42 个子视图(在网格中)的视图时 - 我只是使用 drawRect 并在正确的位置绘制了必要的颜色渐变,然后在它们上绘制了必要的文本。(我还需要不同渐变颜色的不同方块,如果您也需要 - 我相信您将能够进一步调整此代码 :))
- (void)drawRect
{
int mWidth = 99;
int mHeight = 99;
//--- now we draw all gradients (will have 1 pix wide space between each)
for(int i = 0; i < 100; i++)
{
for(int j = 0; j < 100; j++)
{
//--- gradient color
CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
CGFloat colors [] = { //these values are for a white square block.
255/255.0, 255/255.0, 255/255.0, 1.0,
255/255.0, 255/255.0, 255/255.0, 1.0
};
CGGradient gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2);
CGColorSpaceRelease(baseSpace), baseSpace = NULL;
CGContextSaveGState(context);
CGContextAddRect(context, rect);
CGContextClip(context);
CGContextAddRect(context, CGRectMake(1+j*(mWidth+1),0+i*(mHeight+1),mWidth,mHeight+i*mHeight+i*1));
CGContextClip(context);
//+ 1 values to make sure we have one pix wide space between any two squares
CGContextDrawLinearGradient (context, gradient, CGPointMake(1+j*(mWidth+1), 0+i*(mHeight+1)), CGPointMake(1+j*(mWidth+1),0+mHeight+i*mHeight+i*1), 0);
CGGradientRelease(gradient), gradient = NULL;
CGContextRestoreGState(context);
//===
//Here We can draw any string labels we need.
}
}
祝你好运!