2010-12-02 4 views
1

이미지 위에 텍스트를 오버레이해야합니다. 이미지의 세부 사항이 많기 때문에 텍스트를보다 쉽게 ​​읽을 수 있도록해야합니다.iPhone에서 SOFT EDGE로 둥근 사각형을 그리는 방법은 무엇입니까?

내가하고 싶은 것은 텍스트 아래에 부드러운 가장자리가있는 반투명 한 흰색 둥근 사각형을 그리는 것입니다.

흰색 그림자가있는 흰색 둥근 사각형을 페인팅 해 보았습니다. 그러나 그것은 내가 원하는 효과를주지 못합니다. 둥근 사각형과 그림자 사이가 딱딱 해집니다. 나는 그것이 부드러운 전환이되고 싶습니다.

아이디어가 있으십니까?

답변

1

나는 CGGradient과 비슷한 것을 시도해 보았습니다. 고통스럽고 최종 결과가 그렇게 좋아 보이지 않았습니다. 훨씬 쉬운 방법은 부분적으로 투명한 PNG로 가장자리를 만드는 것입니다.

투명 그래픽은 비용이 많이 들기 때문에 많은 라벨이있는 경우 성능이 과도하게 저하 될 수 있지만, 이동하지 않거나 그렇지 않으면 다시 그리기가 많이 필요합니다.) 괜찮을 것입니다.

+1

나를 위해 잘 작동합니다. Adobe Illustrator를 사용하여 64x64 흰색 직사각형을 만들었습니다. 나는 그것을 70 % 불투명하게 만들었고, 32px로 깃털을 내고, 72dpi와 144dpi의 두 가지 버전을 내 보냈다. 코드에서로드하고 [image stretchableImageWithLeftCapWidth : 32 topCapHeight : 32]로 변환 한 다음 이제 마음에 두었던 것을 정확히 그릴 수 있습니다. 감사! –

-1

UIView을 서브 클래스 화하고 drawRect: 메소드를 수정하여 반지름을 허용해야합니다. 10.0px의 고정 반경 drawRect:의 코드 샘플의 경우,이 시도 : 그래서

- (void)drawRect:(CGRect)rect { 

    float radius = 10.0f; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(context, 255,255,255,0.25); 

    CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius); 
    CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius); 
    CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius, 
       radius, M_PI/4, M_PI/2, 1); 
    CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, 
         rect.origin.y + rect.size.height); 
    CGContextAddArc(context, rect.origin.x + rect.size.width - radius, 
       rect.origin.y + rect.size.height - radius, radius, M_PI/2, 0.0f, 1); 
    CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius); 
    CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius, 
       radius, 0.0f, -M_PI/2, 1); 
    CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y); 
    CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius, 
       -M_PI/2, M_PI, 1); 

    CGContextFillPath(context); 
} 

이 작업을 수행하는 가장 좋은 방법이 될 것입니다

@property CGFloat radius; 
헤더 파일에

및 재정의를 추가 할 수 기본 생성자는 읽기 :

-(id) initWithFrame:(CGRect)aRect radius:(CGFloat)rad color:(UIColor *)bgColor opacity:(CGFloat)opacity { 
    if (self = [super initWithFrame:aRect]) { 
     [self setOpacity:opacity]; 
     [self setBackgroundColor:bgColor]; 
     [self setRadius:rad]; 
    } 
} 

을 모든 radius 통화 self.radius의,635 제거를 포함하는 내 위의 방법을 조정할상단에 선언.

+0

확실히 둥근 사각형이 생기 겠지만 단단한 테두리가 있습니다. 나는 부드러운 경계선을 만드는 기법을 찾고있다. –

+0

흠, 아마이 기술이 도움이 될까요? http://www.raywenderlich.com/2079/core-graphics-101-shadows-and-gloss –

관련 문제