5

我一直在寻找答案,也试图自己解决,但我做不到,我认为这是最好的地方。所以我试图完成一些简单的事情,但我就是找不到方法。我想我在概念层面上遗漏了一些东西。这就是我尝试在继承 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(上下文,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;
}

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

4

2 回答 2

5

我猜您看不到矩形透明度的原因是您的视图中存在背景颜色。

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

self.backgroundColor = [UIColor clearColor];

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

编辑:

正如@borrrden 所指出的那样,为了达到目的而设置的真实属性可能是opaque. YES根据Apple Docs ,这通常设置为并因此暗示以下内容:

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

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

编辑:

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

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

于 2013-10-07T07:45:07.543 回答
2

你可以用这个,

[[UIImage imageNamed:@"semiTransparentImage.png"] drawInRect:rect blendMode:kCGBlendModeDestinationOut alpha:1.0];
于 2013-10-07T08:00:28.610 回答