2013-10-11 2 views
0

내보기에는 레이블이 있습니다. 이제 레이블 위에 선을 그려야합니다. 즉, 레이블이 선 아래에 있음을 알 수 있습니다.iOS 레이블 위의 선을 그립니다.

지금까지 quartz2D를 사용하여 줄을 그릴 수 있었지만 항상 레이블 아래에있었습니다. 내 문제를 해결할 방법이 있습니까?

+3

Google에서 도와 드릴 수 있도록 코드를 게시하십시오. – Lefteris

+0

당신은 2 점이 높은 UIView를 만들 수 있습니다. –

+0

"under the label"이라고 말하면, 라벨이 라인을 가리고 있다는 것을 의미합니까 (이 경우 라벨의 배경색을 지우면 변경됩니까)? 아니면 당신이 그리는 선의 'y'좌표가 레이블의 맨 위에 레이블의 맨 아래에 나타나는 것과 같았습니까? – Rob

답변

1

솔직히 말해서 가장 쉬운 방법은 [email protected]라는 2x2 픽셀 이미지를 만들고 하단 2 픽셀을 검정색으로, 상단 2를 투명화 한 다음 이미지의 배경 이미지로 사용하는 것입니다 전망. 이미지보기를 패턴 이미지로 사용하여 원하는 너비로 이미지보기를 늘리십시오. 1x 이미지는 1x1 픽셀이어야하며 모두 검은 색이어야합니다.

CAShapeLayer *lineLayer = [CAShapeLayer layer]; 
lineLayer.frame = self.label.bounds; 
lineLayer.strokeColor = [UIColor redColor].CGColor; 

CGRect rect = CGRectMake(0, CGRectGetMidY(lineLayer.bounds), lineLayer.bounds.size.width, 2); 
lineLayer.path = [UIBezierPath bezierPathWithRect:rect].CGPath; 

을 그리고 다음과 같이 UILabel에 추가 :

UIView *lineView = [[UIView alloc] initWithFrame:frame]; // Whatever frame the line needs 

// Add the line image as a pattern 
UIColor *patternColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"line.png"]]; 
lineView.backgroundColor = patternColor; 
[self.view addSubview:lineView]; 
+0

왜 이미지를 사용합니까? 'lineView'의'backgroundColor'를 당신이 필요로하는 선 색상으로 설정하고'lineView'를 단지 한 두 점 높이로 만듭니다. – rmaddy

+0

그래, 그런 종류의 해결책이다. – Bill

+0

@rmaddy 이미지를 사용하면 망막 디스플레이에 얇은 1 픽셀 라인을 만들 수 있으며 화면 크기와 함께 추가 조건을 처리 할 필요가 없습니다. –

3

는이 같은 CAShapeLayer를 만들 수 있습니다 이것이 당신이 많이 사용됩니다 레이블 인 경우

[self.label.layer addSublayer:lineLayer]; 
0

UILabel의 하위 클래스를 만들고 drawRect 함수를 재정의 할 수 있습니다.

- (void) drawRect:(CGRect)r 
{ 
    [super drawRect:r]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextMoveToPoint(context, 1.0, 1.0); 
    CGContextAddLineToPoint(context, self.bounds.size.width - 1.0, 1.0); 
    CGContextStrokePath(context); 
    CGContextRestoreGState(context); 
} 

여기서 이점은 선이보기로 "구워지고"한 번만 그립니다. CAShapeLayer 또는 UIView와 같은 다른 메서드는 모든 프레임마다 다시 렌더링됩니다.

보너스 포인트의 경우 색상 및 선 너비 속성을 만들 수 있습니다.