2013-03-12 4 views
1

Я пытаюсь заполнить прямоугольник CGPattern, рисуя типичный бар полосами. Я получаю это.Правильный рисунок при обрезке CGPattern

enter image description here

Код шаблона (не весь бар) это

CGContextSaveGState (context); 

CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL); 
CGContextSetFillColorSpace(context, patternSpace); 
CGColorSpaceRelease(patternSpace); 
CGFloat alpha = 0.25f; 
static const CGPatternCallbacks callbacks = {0, &DrawStripesPattern, NULL}; 
NSNumber *cellSide = [NSNumber numberWithFloat:kTAGBarHeight]; 
CGFloat cellSideFloat = [cellSide floatValue]; 

CGPatternRef pattern = CGPatternCreate((__bridge void *)(cellSide), 
             CGRectMake(0.0f, 0.0f, cellSideFloat, cellSideFloat), 
             CGAffineTransformIdentity, 
             cellSideFloat, 
             cellSideFloat, 
             kCGPatternTilingConstantSpacing, 
             true, 
             &callbacks); 
CGContextAddPath(context, [path CGPath]); 
CGContextClip(context); 
CGContextSetFillPattern(context, pattern, &alpha); 
CGContextFillRect(context, barRect); 
CGPatternRelease(pattern); 

CGContextRestoreGState (context); 

Клетка модель имеет ту же сторону высоты бара (смотреть на kTAGBarHeight) и чертеж обратный вызов отображает 5 режущих косых линий внутри прямоугольника ячейки. Он выглядит хорошо, но если увеличить немного ...

enter image description here

Линии обрезаемый к клеточному прямоугольнику, так это выглядит так. У меня есть два вопроса:

  1. Почему картина не обращается в начале координат (0,0) в прямоугольнику из адвокатуры как я указываю в CGPatternCreate? Может ли это быть отсутствием преобразования в третьем параметре?
  2. Как я могу избежать этого раздражающего эффекта?

ответ

0

Ну, решили: P

В разрисованном обратном вызове вместо рисования 5 строк Обращают 7, первый в точке (0.0f, 0.0f) и седьмой в точке (Maxx, MAXY). Это правильно соединяет строки.