커스텀 UITableViewCell 배경에 사용하는 둥근 모서리가있는 그라디언트가 있습니다. 나는 경로에 뇌졸중을 적용하려고하지만 아주 할 수 없어, 내가 어디로 잘못 가고 있는지 알 수 없습니다.코어 그래픽에서 둥근 사각형에 획 적용하기
이 코드는 직사각형을 오른쪽으로 반올림하고 그라데이션을 적용하지만 행을 획상 표시하지 않습니다. 내 실수는 어디 갔지?
편집
CGContextRef c = UIGraphicsGetCurrentContext();
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef myGradient = nil;
CGFloat components[8] = TABLE_CELL_BACKGROUND;
CGContextSetFillColorWithColor(c, [[UIColor redColor] CGColor]);
CGContextSetStrokeColorWithColor(c, [[UAColor redColor] CGColor]);
CGContextSetLineWidth(c, 2);
CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
minx = minx + 1;
miny = miny ;
maxx = maxx - 1;
maxy = maxy - 1;
CGContextMoveToPoint(c, minx, miny);
CGContextAddArcToPoint(c, minx, maxy, midx, maxy, kDefaultMargin);
CGContextAddArcToPoint(c, maxx, maxy, maxx, miny, kDefaultMargin);
CGContextAddLineToPoint(c, maxx, miny);
CGContextAddLineToPoint(c, minx, miny);
// Fill and stroke the path
CGContextSaveGState(c);
CGContextClip(c);
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat mycomponents[8] = TABLE_CELL_BACKGROUND;
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
myGradient = CGGradientCreateWithColorComponents(myColorspace, mycomponents, locations, 2);
CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0);
CGContextRestoreGState(c);
CGContextStrokePath(c);
그러나 RECT는 ... 이런 식으로 나오는
... 테두리 없음. CGContextStrokePath(c)
을 CGContextStrokeRect(c, rect)
으로 변경하면 스트로크가 표시됩니다 (설명을 위해 빨간색으로 나타남). 그러나 경로를 쓰다듬어 때 어떻게 든, 나는 :(이
클리핑 경로를 설정할 때 현재 경로가 지워지지 않는 이유는 무엇입니까? CGContextClip에 대한 문서에는이 내용이 언급되어 있지 않습니다. – mrueg
subw : 가능합니다. "새로운 클리핑 경로를 결정한 후이 함수는 컨텍스트의 현재 경로를 빈 경로로 재설정합니다."포스트 스크립트 (PDF의 직계 조상)가이를 수행하기 때문에이 작업이 수행됩니다. –
의미가 있습니다. 오늘 밤에 이걸 시험해 보겠습니다. – coneybeare