首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAGradientLayer显示完全透明

CAGradientLayer显示完全透明
EN

Stack Overflow用户
提问于 2013-09-29 04:57:34
回答 3查看 713关注 0票数 1

我试图创建两个渐变层,一个在滚动视图的每一边,以显示有内容可滚动。

左边的那个工作得很好,但右边的那个完全透明。我遗漏了什么?

代码语言:javascript
复制
CAGradientLayer *l = [CAGradientLayer layer];
l.frame = self.leftBlur.frame;
l.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
l.startPoint = CGPointMake(0.0f, 0.5f);
l.endPoint = CGPointMake(1.0f, 0.5f);
self.leftBlur.layer.mask = l;

self.leftBlur.hidden = YES;

CAGradientLayer *r = [CAGradientLayer layer];
r.frame = self.rightBlur.frame;
r.colors = [NSArray arrayWithObjects:(id)[UIColor clearColor].CGColor, (id)[UIColor whiteColor].CGColor, nil];
r.startPoint = CGPointMake(0.0f, 0.5f);
r.endPoint = CGPointMake(1.0f, 0.5f);
self.rightBlur.layer.mask = r;

调试输出:

代码语言:javascript
复制
(lldb) po r
<CAGradientLayer:0x170ba6d0; position = CGPoint (305 62.5); bounds = CGRect (0 0; 30 125); allowsGroupOpacity = YES; endPoint = CGPoint (1 0.5); startPoint = CGPoint (0 0.5); colors = (
    "<CGColor 0x15e590e0> [<CGColorSpace 0x15e34b50> (kCGColorSpaceDeviceGray)] ( 1 1 )",
    "<CGColor 0x17012ed0> [<CGColorSpace 0x15d15310> (kCGColorSpaceDeviceRGB)] ( 1 0 0 1 )"
)>
(lldb) po self.rightBlur
<UIImageView: 0x171377d0; frame = (290 0; 30 125); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x17137860>>
(lldb) po l
<CAGradientLayer:0x170b9f00; position = CGPoint (15 62.5); bounds = CGRect (0 0; 30 125); allowsGroupOpacity = YES; endPoint = CGPoint (1 0.5); startPoint = CGPoint (0 0.5); colors = (
    "<CGColor 0x15e590e0> [<CGColorSpace 0x15e34b50> (kCGColorSpaceDeviceGray)] ( 1 1 )",
    "<CGColor 0x15d39320> [<CGColorSpace 0x15e34b50> (kCGColorSpaceDeviceGray)] ( 0 0 )"
)>
(lldb) po self.leftBlur
<UIImageView: 0x17136fc0; frame = (0 0; 30 125); hidden = YES; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x17137050>>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-29 05:13:01

您将渐变层的帧设置为与rightBlur的帧相等。这将抵消rightBlur中的层。您应该将其设置为它的边界:

代码语言:javascript
复制
r.frame = self.rightBlur.bounds;

对于左侧,这是因为它的起源是(0,0)。

票数 2
EN

Stack Overflow用户

发布于 2013-09-29 05:13:09

这个问题很可能是因为颜色来自不同的颜色空间。注意,当您执行po r时,颜色不在相同的颜色空间中--一个来自RGB,另一个来自灰色。

我建议您不要使用[UIColor clearColor],而是使用[UIColor colorWithWhite:1.0 alpha:0.0]。与[UIColor whiteColor]一起使用的另一种颜色将导致两种颜色位于相同的颜色空间。

编辑:实际上,问题可能是frame问题指出的“迪德利克”。

票数 5
EN

Stack Overflow用户

发布于 2013-10-11 15:05:49

万一有人问了这个问题,但还是没有用:

记住用CGColor对象而不是UIColor来制作颜色数组。

我花了30分钟在想为什么我的梯度不起作用。

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19074582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档