代码之家  ›  专栏  ›  技术社区  ›  Desgard_Duan

如何使UIView具有透明渐变效果?

  •  28
  • Desgard_Duan  · 技术社区  · 10 年前

    我想做一个 UIView 具有从中间到左右的透明渐变效果。如本例所示:

    enter image description here

    这个词 籍 具有期望的效果。此视图由类实现 MarqueeLabel .我检查了源代码,它可能是由类实现的 CALayer .

    5 回复  |  直到 10 年前
        1
  •  21
  •   R. Mohan fethica    6 年前

    在Swift 4中:用于从上到下的透明渐变。

    let gradient = CAGradientLayer()
    gradient.startPoint = CGPoint(x: 0.5, y: 0.0)
    gradient.endPoint = CGPoint(x: 0.5, y: 0.6)
    let whiteColor = UIColor.white
    gradient.colors = [whiteColor.withAlphaComponent(0.0).cgColor, whiteColor.withAlphaComponent(1.0).cgColor, whiteColor.withAlphaComponent(1.0).cgColor]
    gradient.locations = [NSNumber(value: 0.0),NSNumber(value: 0.2),NSNumber(value: 1.0)]
    gradient.frame = gradientView.bounds
    gradientView.layer.mask = gradient
    
        2
  •  17
  •   Leo    10 年前

    截图

    enter image description here

    银行代码

    let mask = CAGradientLayer()
    mask.startPoint = CGPointMake(0.0, 0.5)
    mask.endPoint = CGPointMake(1.0, 0.5)
    let whiteColor = UIColor.whiteColor()
    mask.colors = [whiteColor.colorWithAlphaComponent(0.0).CGColor,whiteColor.colorWithAlphaComponent(1.0),whiteColor.colorWithAlphaComponent(1.0).CGColor]
    mask.locations = [NSNumber(double: 0.0),NSNumber(double: 0.2),NSNumber(double: 1.0)]
    mask.frame = label.bounds
    label.layer.mask = mask
    
        3
  •  15
  •   Kyokook Hwang    10 年前

    您可以使用 CAGradientLayer 如下所示。

    gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = baseView.bounds;
    gradientLayer.startPoint = CGPointMake(0.5,0.0);
    gradientLayer.endPoint = CGPointMake(0.5,1.0);
    gradientLayer.locations = @[@(0.0), @(0.2), @(1.0)];
    gradientLayer.colors = @[(id)[UIColor colorWithWhite:1.0 alpha:0.9].CGColor,
                             (id)[UIColor colorWithWhite:1.0 alpha:0.3].CGColor,
                             (id)[UIColor colorWithWhite:1.0 alpha:0.0].CGColor];
    [baseView.layer addSublayer:gradientLayer];
    

    CAG半径层 支持几个属性来制作自然渐变,例如通过 startPoint 和 endPoint ,更改颜色曲线 locations 和 colors .

    您还可以通过使用颜色的alpha通道来产生透明效果。

        4
  •  8
  •   jyliang    9 年前

    斯威夫特3:

    let mask = CAGradientLayer()
    mask.startPoint = CGPoint(x: 0, y: 0.5)
    mask.endPoint = CGPoint(x:1.0, y:0.5)
    let whiteColor = UIColor.white
    mask.colors = [whiteColor.withAlphaComponent(0.0).cgColor,whiteColor.withAlphaComponent(1.0),whiteColor.withAlphaComponent(1.0).cgColor]
    mask.locations = [NSNumber(value: 0.0),NSNumber(value: 0.2),NSNumber(value: 1.0)]
    mask.frame = view.bounds
    view.layer.mask = mask
    
        5
  •  3
  •   Jeffrey Neo    6 年前

    使用透明颜色而不是设置alpha值。

    let gradientLayer = CAGradientLayer()
    gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
    gradientLayer.colors = [UIColor.clear.cgColor, UIColor.white.cgColor, UIColor.white.cgColor]
    gradientLayer.locations = [0, 0.2, 1]
    gradientLayer.frame = gradientView.bounds
    gradientView.layer.mask = gradientLayer