0

How can we draw a background pattern (to be set to UIImageView) programmatically like the following?

enter image description here

It has alternating colored squares like 20 x 20 pixels. I can do it with REAL Stupid and MS Visual Basic. I have never done it with iOS. If I run a search, one clue that I get is colorWithPatternImage. I used the following REAL Stupid code a few years ago. It works regardless of the dimensions of the canvas (equivalent to UIImageView).

Dim i,j As Integer
For j=0 To Ceil(CanvasX.Height/20)
For i=0 To Ceil(CanvasX.Width/20)
  If i Mod 2=0 And j Mod 2=0 Then
    If CField1.text="1" Then
      g.ForeColor=&cCC9900
    Elseif CField1.text="2" Then
      g.ForeColor=&c000000
    Else
      g.ForeColor=&cCCCCCC
    End if
  Elseif i Mod 2>0 And j Mod 2>0 Then
    If CField1.text="1" Then
      g.ForeColor=&cCC9900
    Else
      g.ForeColor=&cCCCCCC
    End if
  Else
    If CField1.text="1" Then
      g.ForeColor=&cE6E6E6
    Else
      g.ForeColor=&cFFFFFF
    End if
  End if
  g.FillRect i*20,j*20,20,20
Next i
Next j

Thank you for your help.

4

1 回答 1

1

方法#1:拍摄这张图片:

在此处输入图像描述

然后通过指定图案图像设置背景颜色:

UIImage *bgImage = [UIImage imageNamed:@"squares"];
UIColor *bgColor = [UIColor colorWithPatternImage:bgImage];
someView.backgroundColor = bgColor;

方法#2:使用石英。子类UIView,然后实现以下方法:

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    NSLog(@"%@", ctx);

    CGFloat ws = self.frame.size.width;
    CGFloat hs = self.frame.size.height;

    const int side = 10;

    int nx = ws / side;
    int ny = hs / side;

    CGRect rects[nx / 2];

    for (int i = 0; i < ny; i++) {
        for (int j = 0; j < nx; j += 2) {
            rects[j / 2] = CGRectMake(j * side, i * side, side, side);
        }

        const static CGFloat w[4] = { 1.0, 1.0, 1.0, 1.0 };
        const static CGFloat g[4] = { .75, .75, .75, .75 };

        if (i % 2) {
            CGContextSetFillColor(ctx, g);
        } else {
            CGContextSetFillColor(ctx, w);
        }
        CGContextFillRects(ctx, rects, nx / 2);

        for (int j = 1; j < nx; j += 2) {
            rects[j / 2] = CGRectMake(j * side, i * side, side, side);
        }


        if (i % 2) {
            CGContextSetFillColor(ctx, w);
        } else {
            CGContextSetFillColor(ctx, g);
        }
        CGContextFillRects(ctx, rects, nx / 2);
    }
}
于 2013-04-22T16:45:21.880 回答