Vas*_*rov 5 core-graphics objective-c ios
我一直在寻找答案,并试图自己解决,但我不能,我认为这是最好的问题.所以我想要完成一些简单的事情,但我找不到这样做的方法.我想我在概念层面上缺少一些东西.这就是我尝试在我的类中创建半透明矩形的方法,该矩形是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);
}
Run Code Online (Sandbox Code Playgroud)
好的,这只会使颜色变灰.我也试过这个但结果相同: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;
}
Run Code Online (Sandbox Code Playgroud)
瞧!我解决了 但不完全是.我想在上下文中绘制一个半透明的矩形,而不是让整个视图透明.然后例如添加另一个完全不透明的矩形.很想听听你的想法.谢谢.
我猜你无法看到rect的透明度的原因是你的视图中存在背景颜色.
你会尝试像这样设置视图背景颜色:
self.backgroundColor = [UIColor clearColor];
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个语句,以及设置自定义视图属性的任何语句(例如self.alpha = 0.7;)应该进入init方法.
编辑:
正如@borrrden所指出的那样,为了制定这个技巧而设置的不动产是可能的opaque.YES根据Apple Docs,这通常被设置为并因此暗示以下内容:
预计不透明视图将使用完全不透明的内容填充其边界 - 也就是说,内容的alpha值应为1.0.如果视图不透明并且未填充其边界或包含完全或部分透明的内容,则结果是不可预测的.如果视图完全透明或部分透明,则应始终将此属性的值设置为NO.
将背景颜色设置为clearColor可能会将此属性的值设置NO为附带效果.
编辑:
我不明白你为什么要drawRect在自定义中覆盖UIView半透明的矩形,可能是因为我不知道你想要做什么.在任何情况下,您可能希望查看的另一种方法是使用嵌套UIViews或嵌套CALayers,在其中为其中任何一个分配不同的alpha/ opacity.
如果您只对不同程度不透明度的矩形感兴趣,那么就像UIViews在父视图中嵌套一样简单,并为每个矩形指定一个半透明的背景颜色.
| 归档时间: |
|
| 查看次数: |
4149 次 |
| 最近记录: |