你的代码是正确的,但你忘记设置将被 CAGradientLayer
占用的框架。
请注意,您需要使用带有 alpha 值的颜色,以避免出现黑色.. 例如:
[UIColor colorWithRed:0 green:0.5 blue:1 alpha:0]
或者
[[UIColor YourColor] colorWithAlphaComponent:0]
而不是 [UIColor clearColor]
请查看此示例代码,我已经尝试过了,对我有效,希望这对您也有效.. 祝编码愉快.. :)
CAGradientLayer *rightGradient = [CAGradientLayer layer];
rightGradient.frame = CGRectMake(0, 0, YourLabel.frame.size.width, YourLabel.size.height);
rightGradient.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:0 green:0.5 blue:1 alpha:0].CGColor, (id)[UIColor colorWithRed:0 green:0.5 blue:1 alpha:1].CGColor, nil];
[rightGradient setStartPoint:CGPointMake(0.8, 0.9)];
[rightGradient setEndPoint:CGPointMake(1.0, 0.9)];
[YourLabel.layer addSublayer:rightGradient];
哦,最后一件事,如果您计划在左侧添加渐变,请更改
[rightGradient setStartPoint:CGPointMake(0.8, 0.9)];
[rightGradient setEndPoint:CGPointMake(1.0, 0.9)];
到
[leftGradient setStartPoint:CGPointMake(0.2, 0.1)];
[leftGradient setEndPoint:CGPointMake(0.0, 0.1)];
这里是示例输出:
![enter image description here](https://istack.dev59.com/5yYGF.webp)
按要求更新
第一行:简单分配
CAGradientLayer *rightGradient = [CAGradientLayer layer]
第二行: CAGradientLayer
的框架
rightGradient.frame = CGRectMake(0, 0, YourLabel.frame.size.width, YourLabel.size.height)
这非常重要,这就是设置框架的地方(与UIView等相同)
CAGradientLayer
,意味着
origin.x
和
origin.y
也会被考虑进去。
第三行:
.colors
rightGradient.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:0 green:0.5 blue:1 alpha:0].CGColor, (id)[UIColor colorWithRed:0 green:0.5 blue:1 alpha:1].CGColor, nil]
当您像我的示例一样分配颜色数组时,颜色会相应地排列.. (color.alpha == 0) 在索引0中,(color.alpha == 1) 在索引1中,并将从左到右显示..
第4行:setStartPoint
[rightGradient setStartPoint:CGPointMake(0.8, 0.9)];
起点对应于渐变的第一个停止点。该点在单位坐标空间中定义,然后在绘制时映射到图层的边界矩形中。
默认值为(0.5,0.0)。
第5行:
setEndPoint
。
[rightGradient setEndPoint:CGPointMake(1.0, 0.9)];
终点对应于渐变的最后一站。该点在单位坐标空间中定义,然后在绘制时映射到图层的边界矩形中。
默认值为(0.5,1.0)。
[YourLabel.layer addSublayer:rightGradient];
所有的讨论都在这里了.. CAGradientLayer
关于你所询问的颜色,你可以使用这个:UIColor Code Generator
但是如果你想要使用像#ace123
这样的十六进制字符串来表示颜色,你可以使用这个方法:
+ (UIColor *)colorWithHexString:(NSString *)hexString withOpacity:(CGFloat)opacity
{
unsigned rgbValue = 0;
NSScanner *scanner;
scanner = [NSScanner scannerWithString:hexString];
scanner.scanLocation = ([hexString hasPrefix:@"#"]) ? 1 : 0;
[scanner scanHexInt:&rgbValue];
UIColor *color = [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:opacity];
return color;
}
^_^ 干杯!