2013-04-22 3 views
0

Как мы можем нарисовать фоновый узор (который должен быть установлен на UIImageView) программным способом следующим образом?Рисование изображения с чередующимися цветами

enter image description here

Это имеет чередующиеся цветные квадраты, как 20 х 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

Подход # 1: принять это изображение:

enter image description here

Затем установите цвет фона, указав шаблон изображения:

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); 
    } 
} 
+0

Большое спасибо. Подход №2 - это то, что я ищу. Добрый день... –

Смежные вопросы