如何覆盖-drawLayer:inContext:让我的UIView绘制透明背景?

时间:2015-02-01 16:35:03

标签: ios objective-c uiview calayer cgcontext

从问题的答案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的含义。

0 个答案:

没有答案