2012-09-11 5 views
1

검정색 윤곽선이있는 원과 프로그래밍 방식으로 흰색을 프로그래밍 방식으로 다른 색 (UIColor를 통해)으로 만드는 데 필요한 흰색 채우기가 있습니다. 나는 소수의 다른 stackoverflow 솔루션을 시도했지만 그 중 아무 것도 제대로 작동하지 않는 것 같습니다. 외부 또는 개요 만 작성하면됩니다.UIImage를 다른 색으로 착색하거나 벡터에서 UIImage를 생성합니다.

나는이 작업을 수행 할 수있는 두 가지 방법이 있지만 내가 올바른 결과를 얻을 것이라고 어떻게 확신 이니,

또는,

색조 그냥 흰 색입니다 UIColor이 있어야 할 무엇에를

UIImage를 두 개의 원으로 만듭니다. 하나는 채워지고 하나는 검정으로 중첩됩니다.

+0

당신은 당신의 drawRect에서 원을 그리거나 이미지의 어떤 종류를 사용하고 있음을 의미합니까? –

+0

CoreGraphics를 사용하여 동적으로 또는 검정색의 흰색 버전을 색칠하여 UIColor'd 원과 검은 색 테두리가있는 24x24 크기의 UIImage를 만들 필요가 있습니다. –

답변

0

단순한 모양의 경우 CoreGraphics를 사용하여 정사각형과 원을 그리면 구현시 채우기 색상을 설정할 수있는 기능이 추가됩니다.

그냥 흑백 인 경우 색을 잘 아는 경우 흰색을 다른 색으로 변경하는 것이 그리 어렵지 않습니다. 안타깝게도이 방법은 작성하고 실행하기가 더 복잡합니다 ... 제가 추천 한 것은 CoreGraphics로 바로 간략한 작업을 위해 곧바로 진행하는 것입니다 (나쁜 말장난, 미안).

static void InsetRect(CGRect* const pRect, const CGFloat pAmount) { 
    const CGFloat halfAmount = pAmount * 0.5f; 
    *pRect = CGRectMake(pRect->origin.x + halfAmount, pRect->origin.y + halfAmount, pRect->size.width - pAmount, pRect->size.height - pAmount); 
} 

static void DrawBorderedCircleWithWidthInContext(const CGRect pRect, const CGFloat pWidth, CGContextRef pContext) { 
    CGContextSetLineWidth(pContext, pWidth); 
    CGContextSetShouldAntialias(pContext, true); 
    CGRect r = pRect; 
    /* draw circle's border */ 
    CGContextSetRGBStrokeColor(pContext, 0.8f, 0.7f, 0, 1); 
    InsetRect(&r, pWidth); 
    CGContextStrokeEllipseInRect(pContext, r); 
    /* draw circle's fill */ 
    CGContextSetRGBFillColor(pContext, 0, 0, 0.3f, 1); 
    InsetRect(&r, pWidth); 
    CGContextFillEllipseInRect(pContext, r); 
} 
0

는 UIView의 확장 단지의 drawRect 메서드를 구현 :

여기에 빠른 데모입니다. 예를 들어 검은 색 외곽선이있는 녹색 원이 그려집니다.

 - (void)drawRect:(CGRect)rect { 

      [super drawRect:rect]; 

      CGContextRef gc = UIGraphicsGetCurrentContext(); 

      [[UIColor greenColor] setFill]; 
      CGContextFillEllipseInRect(gc, CGRectMake(0,0,24,24)); 

      [[UIColor blackColor] set]; 
      CGContextStrokeEllipseInRect(gc, CGRectMake(0,0,24,24)); 
    } 
5

두 개의 원 (하나는 흰색, 하나는 검은 색)을 사용하기로 결정했다면 도움이 될 것입니다. 이 방법은 당신에게 uiimage를 채색하지만, 불투명 한 부분 만 색칠하는 문제를 해결합니다. 즉, png에 원을 중심으로 투명도를 제공하면 원에 색을 칠합니다. 따라서 이미지의 전체 24x24 프레임을 채우는 대신 불투명 한 부분 만 채 웁니다. 이것은 정확하게 당신의 질문이 아니지만, 당신이 열거 한 두 번째 옵션을 사용한다면이 문제를 보게 될 것입니다.

-(UIImage*)colorAnImage:(UIColor*)color :(UIImage*)image{ 

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); 
UIGraphicsBeginImageContextWithOptions(rect.size, NO, image.scale); 
CGContextRef c = UIGraphicsGetCurrentContext(); 
[image drawInRect:rect]; 
CGContextSetFillColorWithColor(c, [color CGColor]); 
CGContextSetBlendMode(c, kCGBlendModeSourceAtop); 
CGContextFillRect(c, rect); 
UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return result; 

}

+1

감사합니다! 나는이 같은 영원히 롤 솔루션을 찾고 있었어. – user2734823

관련 문제