2013-03-12 2 views
1

CGPattern으로 rect를 채우고 스트라이프가있는 일반적인 막대를 그림으로 그려야합니다. 나는 이것을 얻는다.CGPattern을 바둑판 식으로 배열 할 때 올바른 그림

enter image description here

패턴 (전체가 아닌 바)의 코드 패턴 셀은 바 (kTAGBarHeight 보면)의 높이가 동일한면을 가지고이

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); 

및 도면 콜백 (callback)은 셀 rect 내부에 5 개의 규칙적인 사선을 그립니다. 그것은 좋아 보인다하지만 ... 조금 확대하면 그것은 그 모양 때문에

enter image description here

의 선

은 셀 RECT 클리핑되고있다. 나는 두 가지 질문이있다 : 패턴이 내가 CGPatternCreate에서 지정한대로 표시 줄의 RECT의 원점 (0,0)에서 인출되지 않는 이유는

  1. ? 세 번째 매개 변수에서 변환의 부재가 일 수 있습니까?
  2. 어떻게 그 성가신 효과를 피할 수 있습니까? 해결

답변

0

그럼 대신 5 개 라인 드로잉 내 드로잉 콜백 P

I 7 그릴 점에서 제 (은 0.0f, 0.0f로)과 시점 일곱째 (맥스, MAXY). 그것은 라인들을 올바르게 합칩니다.

관련 문제