【问题标题】:How to give horizontal gradient color to button in ios如何为ios中的按钮提供水平渐变颜色
【发布时间】:2016-07-01 05:28:57
【问题描述】:

如何为ios中的按钮赋予水平渐变颜色?

我试图在水平方向上将按钮渐变颜色设为蓝色,但没有正确输出。

【问题讨论】:

    标签: ios uikit gradient uicolor


    【解决方案1】:

    我不确定,但试试这个代码

    CAGradientLayer *btnGradient = [CAGradientLayer layer];
    btnGradient.frame = btn.bounds;
    btnGradient.colors = [NSArray arrayWithObjects:
                                  (id)[[UIColor colorWithRed:102.0f / 255.0f green:102.0f / 255.0f blue:102.0f / 255.0f alpha:1.0f] CGColor],
                                  (id)[[UIColor colorWithRed:51.0f / 255.0f green:51.0f / 255.0f blue:51.0f / 255.0f alpha:1.0f] CGColor],
                                 nil];
    [yourbtn.layer insertSublayer:btnGradient atIndex:0];
    

    【讨论】:

    • 它的颜色是垂直方向而不是水平方向
    • 设置它的渐变位置、起点和终点为:=> gradient.locations = [0, 0.5, 0.5, 1.0] /* 使其水平*/ gradient.startPoint = CGPointMake(0, 0.5) gradient.endPoint = CGPointMake(1, 0.5)
    • 现在它是水平方向的,但它在按钮底部显示了一个不需要的蓝色层。
    • 你应该去设置>常规>辅助功能并关闭按钮形状,然后重新运行应用程序,它将删除不需要的蓝色层
    【解决方案2】:

    这会让你为你的按钮插入一个水平渐变,第一种颜色在左边,第二种颜色在右边:

    extension UIView {
        func insertHorizontalGradient(_ color1: UIColor, _ color2: UIColor) {
            let gradient = CAGradientLayer()
            gradient.colors = [color1.cgColor, color2.cgColor]
            gradient.transform = CATransform3DMakeRotation(CGFloat.pi / 2, 0, 0, 1)
            gradient.frame = bounds
            layer.insertSublayer(gradient, at: 0)
        }
    }
    

    您可能希望保留对图层的引用以调整其框架的大小,否则请确保仅在按钮框架确定后才调用它。

    【讨论】:

      【解决方案3】:

      你可以试试下面的代码:

      {
          UIColor *transBgColor = [UIColor colorWithWhite:1.0 alpha:0.0];
          UIColor *black = [UIColor blackColor];
          CAGradientLayer *maskLayer = [CAGradientLayer layer];
          maskLayer.opacity = 0.8;
          maskLayer.colors = [NSArray arrayWithObjects:(id)black.CGColor, 
          (id)transBgColor.CGColor, (id)transBgColor.CGColor, (id)black.CGColor, nil];
      
          // Horizontal - commenting these two lines will make the gradient vertical
          maskLayer.startPoint = CGPointMake(0.0, 0.5);
          maskLayer.endPoint = CGPointMake(1.0, 0.5);
      
          NSNumber *gradTopStart = [NSNumber numberWithFloat:0.0];
          NSNumber *gradTopEnd = [NSNumber numberWithFloat:0.4];
          NSNumber *gradBottomStart = [NSNumber numberWithFloat:0.6];
          NSNumber *gradBottomEnd = [NSNumber numberWithFloat:1.0];
          maskLayer.locations = @[gradTopStart, gradTopEnd, gradBottomStart, gradBottomEnd];
      
          maskLayer.bounds = container.bounds;
          maskLayer.anchorPoint = CGPointZero;
          [container.layer addSublayer:maskLayer];
      }
      

      【讨论】:

        猜你喜欢
        • 2022-11-13
        • 2019-08-27
        • 2018-12-27
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2017-04-30
        • 2013-04-27
        • 2016-01-25
        相关资源
        最近更新 更多