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 に答える