在iOS中绘制半透​​明矩形

时间:2013-10-07 07:41:28

标签: ios objective-c core-graphics

我一直在寻找答案,并试图自己解决,但我不能,我认为这是最好的问题。所以我想要完成一些简单的事情,但我找不到这样做的方法。我想我在概念层面上缺少一些东西。这就是我尝试在我的类中创建半透明矩形的方法,该矩形是UIView的子类:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    //this should be white color with 0.7 opacity right
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.7);
    CGContextFillRect(context, self.bounds);
}

好的,这只会使颜色变灰。我也试过这个,但结果相同:     CGContextSetRGBFillColor(context,1.0,1.0,1.0,1.0);
    CGContextSetAlpha(context,0.7);

另一次尝试:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
    CGContextFillRect(context, self.bounds);

    self.alpha = 0.7;
}

瞧!我解决了但不完全是。我想在上下文中绘制一个半透明的矩形,而不是让整个视图透明。然后例如添加另一个完全不透明的矩形。很想听听你的想法。感谢。

2 个答案:

答案 0 :(得分:5)

我想您无法看到rect的透明度的原因是视图中存在背景颜色。

您是否尝试像这样设置视图背景颜色:

self.backgroundColor = [UIColor clearColor];

顺便说一句,此声明以及设置自定义视图属性的任何语句(例如self.alpha = 0.7;)都应该使用init方法。

编辑:

正如@borrrden所指出的那样,为了制作这个技巧而设置的不动产可能是opaque。根据{{​​3}}:

,这通常设置为YES,因此意味着以下内容
  

预计不透明视图将使用完全不透明的内容填充其边界 - 也就是说,内容的alpha值应为1.0。如果视图不透明并且未填充其边界或包含完全或部分透明的内容,则结果是不可预测的。如果视图完全透明或部分透明,则应始终将此属性的值设置为NO。

将背景颜色设置为clearColor可能会将此属性的值设置为NO作为附带效果。

编辑:

我不明白你为什么要在自定义drawRect中覆盖UIView来绘制一个半透明的矩形,可能是因为我不知道你想要做什么。在任何情况下,您可能希望查看的另一种方法是使用嵌套的UIViews或嵌套的CALayers,在其中为其中任何一个分配不同的alpha / opacity它们。

如果您只对具有不同程度不透明度的矩形感兴趣,那么就像在父视图中嵌套UIViews一样简单,并为它们分配半透明的背景颜色。

答案 1 :(得分:2)

你可以使用它,

[[UIImage imageNamed:@"semiTransparentImage.png"] drawInRect:rect blendMode:kCGBlendModeDestinationOut alpha:1.0];