iPhone/Touch SDK를 사용하여 일부 선을 그리려하고 있습니다. 라인의 색을 바꿀 수 있지만 CGContextSetRGBStrokeColor를 호출하면 CGContextStrokePath에 대한 실제 호출이 이루어질 때까지 CGContextAddLineToPoint로 그려진 선에 영향을 미치지 않는 것 같습니다. 따라서 색상을 변경하기 위해 여러 번 호출하면 CGContextStrokePath 직전에 만들어진 것만 효과가 있습니다. 여기에 무슨 뜻입니까 :CGContextStrokePath를 사용하여 색상 변경
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctx, 0, 0);
CGContextSetRGBStrokeColor(ctx,1,0,0,1);
CGContextAddLineToPoint(ctx, 100, 100);
//CGContextStrokePath(ctx);
CGContextSetRGBStrokeColor(ctx,0,1,0,1);
CGContextAddLineToPoint(ctx, 200, 300);
//CGContextStrokePath(ctx);
CGContextSetRGBStrokeColor(ctx,0,0,1,1);
CGContextStrokePath(ctx);
}
나는 무언가를 잘못하고 있다고 가정합니다. CGContextStrokePath 호출을 추가하면 도움이된다는 생각이 들었습니다.
내가 수정 된 코드에 도착하는 방법은 아래참조 토론 :
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 0, 0);
CGContextSetRGBStrokeColor(ctx,1,0,0,1);
CGContextAddLineToPoint(ctx, 100, 100);
CGContextStrokePath(ctx);
CGContextClosePath(ctx);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 100, 100);
CGContextSetRGBStrokeColor(ctx,0,1,0,1);
CGContextAddLineToPoint(ctx, 200, 300);
CGContextStrokePath(ctx);
}
흠, 결론은 CGContextStrokePath (ctx) 행을 주석 처리하지 않은 시뮬레이터에서 위의 코드를 실행하면 빨간색으로 그려진 첫 번째 줄을 얻습니다. 그것이해야하는 것처럼 보이는 것은 빨간색으로 첫 번째 선을 그린 다음 두 번째 선을 녹색으로 그립니다. 그러나 아이폰 시뮬레이터에서 실행하면 어떻게되는지는 알 수 없습니다. – stinkymatt
아마도 첫 번째 전화를 걸면 현재 경로 (시작 지점 포함)가 삭제됩니까? Apple docs에 따르면 - "Quartz는 그래픽 상태의 선 너비와 획 색상을 사용하여 패스를 페인트합니다.이 함수를 호출 할 때 부작용으로 Quartz가 현재 경로를 지 웁니다." –
먼저, 지워진 단어 사용에 대해 감사드립니다. 그것은 내 즐겨 찾기 중 하나입니다. 둘째로, 다른 방법으로 문서를 보는 데 도움을 주셔서 감사합니다. CGContextBeginPath (ctx)를 호출하면됩니다. 그런 다음 획 색상을 변경하고 시작점을 이동 한 다음 선을 추가 한 다음 선을 치고 닫습니다. 후속 선분에 대해 반복하십시오. 나는 후손을 위해 원래의 게시물에 수정 된 코드를 추가하려고 노력할 것이다. 감사! – stinkymatt