사용자 정의 컨테이너보기에 주황색 backgroundColor
이 있습니다.내 사용자 지정 UIView에서 하위 뷰의 backgroundColor를 설정하면 내 drawRect 드로잉 (CGContextRef, CGMutablePathRef 등)을 덮게됩니다. 어떻게 고치는 지?
이 사용자 정의보기에서는 drawRect
을 무시하여 선을 그립니다. 이것은 서브 뷰 위에 선을 그릴 때까지 훌륭하게 작동합니다. 여기
이 ^이 이미지는 self.graphBackgroundView
현재 내 사용자 정의보기를 표시하지만 명시 적 backgroundColor
없이 설정된다. 내 drawRect
의 내 줄을 볼 수 있습니다. 이것은 좋다.
^이 이미지는 self.graphBackgroundView
인 사용자 정의보기를 표시하지만 명시 적으로 backgroundColor
이 설정되어 있습니다. 녹색 초록의 z- 색인이 내 drawRect의 z- 색인보다 높거나 같습니다.
^가 마지막이 이미지는 본 self.graphBackgroundView
내 정의보기를 도시 명시 backgroundColor
가 설정되고 (여전히 녹색)하지만 0.25의 self.graphBackgroundView.layer.opacity
세트. 여기서 우리는 drawRect 라인을 다시 볼 수 있습니다. 그러나 그것은 옳지 않습니다. 라인이 뷰의 맨 위에 그려지기를 바랄뿐입니다.
실제 문제는 녹색 스크린 샷에서 볼 수 있습니다. 우리는 불투명 한 녹색 하위 뷰를 원합니다. 우리는 단지 흰색 선을 그 위에 그린 싶습니다.
많은 도움을 주셨습니다.
- (void)drawRect:(CGRect)rect
{
// GET CONTEXT
CGContextRef context = UIGraphicsGetCurrentContext();
// INIT PATH
CGMutablePathRef path = CGPathCreateMutable();
// CONFIG PATH
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColor(context, CGColorGetComponents([UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor)); // 4 color component white for use with CGColorGetComponents
// ESTABLISH STARTING POINT
CGPathMoveToPoint(path, NULL, 0.0, 100.0);
// GRAPH NEXT POINT
CGPathAddQuadCurveToPoint(path, NULL, 120.0, 160.0, 120.0, 160.0);
// GRAPH NEXT POINT
CGPathAddQuadCurveToPoint(path, NULL, 130.0, 170.0, 130.0, 170.0);
// ADD THE PATH
CGContextAddPath(context, path);
// DRAW
CGContextDrawPath(context, kCGPathStroke);
}
- (id)init
{
self = [super init];
if (self)
{
// INIT UI ELEMENTS
self.graphBackgroundView = [[UIView alloc] init];
// INIT AUTO LAYOUT VIEWS DICT
self.viewsDictionary = [NSMutableDictionary new];
[self.viewsDictionary setObject:self.graphBackgroundView forKey:@"graphBackgroundView"];
// TURN ON AUTO LAYOUT
self.graphBackgroundView.translatesAutoresizingMaskIntoConstraints = NO;
// ESTABLISH VIEW HIERARCHY
[self addSubview:self.graphBackgroundView];
// LAYOUT
// graphBackgroundView
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[graphBackgroundView]-(0)-|" options:0 metrics:0 views:self.viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(topMargin)-[graphBackgroundView]-(bottomMargin)-|" options:0 metrics:@{@"topMargin":self.topMargin,@"bottomMargin":self.bottomMargin} views:self.viewsDictionary]];
// CONFIG
// self
self.backgroundColor = [UIColor orangeColor]; // My drawRect code DOES draw on top of this color
// graphBackgroundView
self.graphBackgroundView.backgroundColor = [UIColor greenColor]; // My drawRect code does NOT draw on top of this color
//self.graphBackgroundView.layer.opacity = 0.25; // <-- If I uncomment this I can kind of see the line I'm drawing underneath it via the effects of transparency
}
return self;
}
코드를 작성하는 시점에 나는 사용자 정의보기를 "단일 한 것"으로 생각했습니다. 마찬가지로,'drawRect'는 자신과 서브 뷰를 그리기 위해 돌았습니다. ('init'에서 나는 그것들을 레이아웃하고 있습니다 ...). 예,보기, 내부 드로잉 코드 등을 생각할 때 이것이 의미가없는 방식을 지금 보았습니다. 어쨌든, 이제 알아 냈습니다. 당신의 대답은 들썩 들썩합니다. 그것은 여기서 무슨 일이 일어나는지 정확히 설명한다는 점에서 매우 도움이됩니다. 건배, 고마워! –