从问题的答案UIView subclass draws background despite completely empty drawRect: - why?我了解到,我可以覆盖-drawLayer:inContext:
我的自定义UIView
,以使其不在其中绘制背景{{1}在我画画之前。
我正在创建一个显示评分的视图,例如iTunes,我希望视图的backgroundColor
是未选择的星的颜色,backgroundColor
的颜色是选定的明星,像这样:
tintColor
首先计算星星的大小,用- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGFloat starWidth = self.bounds.size.width / _maxRating;
CGFloat starHeight = self.bounds.size.height;
CGContextSetFillColorWithColor(ctx, [UIColor clearColor].CGColor);
CGContextFillRect(ctx, self.bounds);
CGContextSetLineWidth(ctx, 0.1f);
CGContextSetFillColorWithColor(ctx, self.backgroundColor.CGColor);
for (int i = floorf(_rating); i < _maxRating; i++)
[self drawStarInContext:ctx inRect:CGRectMake(starWidth * i, 0, starWidth, starHeight)];
CGContextClipToRect(ctx, CGRectMake(0, 0, starWidth * _rating, starHeight));
CGContextSetFillColorWithColor(ctx, self.tintColor.CGColor);
for (int i = 0; i <= _rating; i++)
[self drawStarInContext:ctx inRect:CGRectMake(starWidth * i, 0, starWidth, starHeight)];
}
填充然后绘制任何取消选择的星星,然后选择星星。除了我在[UIColor clearColor]
中获得背景这一事实外,这非常有效。我想使用它的超级视图使用图像作为它的背景,因此我真的需要它是透明的,只需用self.backgroundColor
填充它就不会。
请告诉我Pascal的含义。