내보기에는 레이블이 있습니다. 이제 레이블 위에 선을 그려야합니다. 즉, 레이블이 선 아래에 있음을 알 수 있습니다.iOS 레이블 위의 선을 그립니다.
지금까지 quartz2D를 사용하여 줄을 그릴 수 있었지만 항상 레이블 아래에있었습니다. 내 문제를 해결할 방법이 있습니까?
내보기에는 레이블이 있습니다. 이제 레이블 위에 선을 그려야합니다. 즉, 레이블이 선 아래에 있음을 알 수 있습니다.iOS 레이블 위의 선을 그립니다.
지금까지 quartz2D를 사용하여 줄을 그릴 수 있었지만 항상 레이블 아래에있었습니다. 내 문제를 해결할 방법이 있습니까?
솔직히 말해서 가장 쉬운 방법은 [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];
는
는이 같은 CAShapeLayer
를 만들 수 있습니다 이것이 당신이 많이 사용됩니다 레이블 인 경우
[self.label.layer addSublayer:lineLayer];
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와 같은 다른 메서드는 모든 프레임마다 다시 렌더링됩니다.
보너스 포인트의 경우 색상 및 선 너비 속성을 만들 수 있습니다.
Google에서 도와 드릴 수 있도록 코드를 게시하십시오. – Lefteris
당신은 2 점이 높은 UIView를 만들 수 있습니다. –
"under the label"이라고 말하면, 라벨이 라인을 가리고 있다는 것을 의미합니까 (이 경우 라벨의 배경색을 지우면 변경됩니까)? 아니면 당신이 그리는 선의 'y'좌표가 레이블의 맨 위에 레이블의 맨 아래에 나타나는 것과 같았습니까? – Rob