【问题标题】:CAGradientLayer shows totally translucentCAGradientLayer 显示完全半透明
【发布时间】:2013-09-29 04:57:34
【问题描述】:

我正在尝试创建两个渐变层,一个在滚动视图的每一侧,以显示有要滚动到的内容。

左侧的效果很好,但右侧的显示完全透明。我错过了什么?

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;

调试输出:

(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>>

【问题讨论】:

    标签: ios objective-c cocoa-touch calayer


    【解决方案1】:

    问题很可能是由于颜色来自不同的颜色空间。请注意,当您执行po r 时,颜色不在同一个颜色空间中——一种来自 RGB,另一种来自灰色。

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

    编辑:实际上问题可能是“diederikh”指出的frame 问题。

    【讨论】:

    • 我的图层最初是黑色而不是清晰的颜色,我不明白为什么。谢谢!
    【解决方案2】:

    您将渐变层的框架设置为等于rightBlur 的框架。这将偏移rightBlur 内的层。您应该将其设置为界限:

    r.frame = self.rightBlur.bounds;
    

    对于左边这行得通,因为它的原点是 (0,0)

    【讨论】:

      【解决方案3】:

      以防万一有人提出这个问题,但它仍然不起作用:

      记得用 CGColor 对象而不是 UIColor 来创建颜色数组。

      我花了 30 分钟想知道为什么我的渐变不起作用。

      希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 2017-04-16
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 2014-10-22
        • 2019-07-01
        相关资源
        最近更新 更多