0

我正在开发一个 Iphone 应用程序。我想要一个由看不见的小方块组成的网格。

我希望能够从代码中更改这些方块的颜色。

我怎样才能做到这一点?

附加信息:

网格是静态的(某种国际象棋网格),我需要能够更改其中给定方块的颜色。例如,将正方形 C3 的颜色更改为红色,将 E7 的颜色更改为绿色。

除了着色之外,我不想在正方形中放置任何内容。

4

3 回答 3

1

您可以继承 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];
}

iOS 绘图指南

于 2012-10-24T11:40:15.883 回答
0

theView.backgroundColor = color;

于 2012-10-24T09:41:41.240 回答
0

当我想创建一个具有 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.
        }
    }

祝你好运!

于 2012-10-24T12:08:59.387 回答