Xer*_*nox 0 uibutton ios cagradientlayer
如何给UIButton标题添加渐变,虽然按钮背景清晰,但边角也是渐变的。
我在这里找到了如何添加渐变边框,但不知道如何制作渐变标签。如果标签渐变与边框渐变颜色相匹配,那就太好了。
也许我可以用形状像标签的面具以某种方式创造这种效果?
喜的easies的方法是创建一个UIColor从patternImage像这样:
let image = UIImage(named: "gradient.jpeg");
let color = UIColor(patternImage: image!);
Run Code Online (Sandbox Code Playgroud)
然后只需在您需要的地方使用颜色:
buttonAction.layer.borderWidth = 1;
buttonAction.layer.cornerRadius = 5;
buttonAction.layer.borderColor = color.cgColor;
buttonAction.setTitleColor(color, for: .normal);
Run Code Online (Sandbox Code Playgroud)
用于创建渐变 UIColor 使用此方法:(您可以将其添加到 UIColor 扩展)
func gradientColorFrom(color color1:UIColor, toColor color2:UIColor ,withSize size:CGSize) ->UIColor
{
UIGraphicsBeginImageContextWithOptions(size, false, 0);
let context = UIGraphicsGetCurrentContext();
let colorspace = CGColorSpaceCreateDeviceRGB();
let colors = [color1.cgColor, color2.cgColor] as CFArray;
let gradient = CGGradient(colorsSpace: colorspace, colors: colors, locations: nil);
context!.drawLinearGradient(gradient!, start: CGPoint(x:0, y:0), end: CGPoint(x:size.width, y:0), options: CGGradientDrawingOptions(rawValue: UInt32(0)));
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
let finalCColor = UIColor(patternImage: image!);
return finalCColor;
}
Run Code Online (Sandbox Code Playgroud)
CGPoint(x:size.width, y:0)CGPoint(x:0, y:size.height)虽然康斯坦丁的回答确实有效,但标题标签渐变不一定与边框颜色匹配:

所以这是我的解决方案:
class GradientButton: UIButton {
override func awakeFromNib() {
layoutIfNeeded()
let gradientBorder = CAGradientLayer()
gradientBorder.frame = bounds
//Set gradient to be horizontal
gradientBorder.startPoint = CGPoint(x: 0, y: 0.5)
gradientBorder.endPoint = CGPoint(x: 1, y: 0.5)
gradientBorder.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
let shape = CAShapeLayer()
shape.lineWidth = 2
shape.path = UIBezierPath(rect: bounds).cgPath
shape.strokeColor = UIColor.black.cgColor
shape.fillColor = UIColor.clear.cgColor
gradientBorder.mask = shape
layer.addSublayer(gradientBorder)
let gradient = CAGradientLayer()
gradient.frame = bounds
//Set gradient to be horizontal
gradient.startPoint = CGPoint(x: 0, y: 0.5)
gradient.endPoint = CGPoint(x: 1, y: 0.5)
gradient.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
layer.insertSublayer(gradient, at: 0)
let overlayView = UIView(frame: bounds)
overlayView.isUserInteractionEnabled = false
overlayView.layer.insertSublayer(gradient, at: 0)
overlayView.mask = titleLabel
addSubview(overlayView)
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |