用交替颜色绘制图像

时间:2013-04-22 16:12:04

标签: ipad ios6 uiimageview uiimage

我们如何以编程方式绘制背景图案(设置为 UIImageView ),如下所示?

enter image description here

它有交替的彩色方块,如20 x 20像素。我可以用REAL Stupid和MS Visual Basic做到这一点。我从来没有用iOS做过。如果我运行搜索,我得到的一个线索是 colorWithPatternImage 。几年前我使用了以下REAL Stupid代码。无论画布的尺寸如何,它都可以工作(相当于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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

enter image description here

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

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

方法#2:使用Quartz。子类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);
    }
}