以编程方式在网格中着色单元格

时间:2012-10-24 09:38:29

标签: iphone objective-c ios grid

我正在开发Iphone应用程序。我想要一个小的隐形方块网格。

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

我该怎么做?

其他信息:

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

除了着色之外,我不想在广场上放置任何内容。

3 个答案:

答案 0 :(得分: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];
}

Drawing guide for iOS

答案 1 :(得分:0)

theView.backgroundColor = color;

答案 2 :(得分: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.
        }
    }
祝你好运!