私は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.
}
}
幸運を!