我一直在寻找答案,并试图自己解决,但我不能,我认为这是最好的问题。所以我想要完成一些简单的事情,但我找不到这样做的方法。我想我在概念层面上缺少一些东西。这就是我尝试在我的类中创建半透明矩形的方法,该矩形是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;
}
瞧!我解决了但不完全是。我想在上下文中绘制一个半透明的矩形,而不是让整个视图透明。然后例如添加另一个完全不透明的矩形。很想听听你的想法。感谢。
答案 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];