Swift 使 UIView 边框变成渐变色

标签 swift

我想在 UIView 上创建一个渐变边框。

以下代码可以为 View Box1 生成实体。

我发现没有任何东西允许我将 frameColor 更改为渐变。

    var frameColor = UIColor.red.cgColor

    var leftBorder = CALayer()
    leftBorder.frame = CGRect(x: 0.0, y: 0, width: 1, height: box1.frame.size.height )
    leftBorder.backgroundColor = frameColor

我正在使用 Swift 5 和 Xcode 11。

谢谢。

最佳答案

试试下面的扩展

public extension UIView {

private static let kLayerNameGradientBorder = "GradientBorderLayer"

func setGradientBorder(
    width: CGFloat,
    colors: [UIColor],
    startPoint: CGPoint = CGPoint(x: 0.5, y: 0),
    endPoint: CGPoint = CGPoint(x: 0.5, y: 1)
    ) {
    let existedBorder = gradientBorderLayer()
    let border = existedBorder ?? CAGradientLayer()
    border.frame = bounds
    border.colors = colors.map { return $0.cgColor }
    border.startPoint = startPoint
    border.endPoint = endPoint

    let mask = CAShapeLayer()
    mask.path = UIBezierPath(roundedRect: bounds, cornerRadius: 0).cgPath
    mask.fillColor = UIColor.clear.cgColor
    mask.strokeColor = UIColor.white.cgColor
    mask.lineWidth = width

    border.mask = mask

    let exists = existedBorder != nil
    if !exists {
        layer.addSublayer(border)
    }
}

func removeGradientBorder() {
    self.gradientBorderLayer()?.removeFromSuperlayer()
}

private func gradientBorderLayer() -> CAGradientLayer? {
    let borderLayers = layer.sublayers?.filter { return $0.name == UIView.kLayerNameGradientBorder }
    if borderLayers?.count ?? 0 > 1 {
        fatalError()
    }
    return borderLayers?.first as? CAGradientLayer
}

用法

self.borderView.setGradientBorder(width: 5.0, colors: [UIColor.red , UIColor.blue])

enter image description here

希望能达到您的要求。

https://medium.com/@kushal0409/gradient-button-3dc8ef763039

关于Swift 使 UIView 边框变成渐变色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58098671/

相关文章:

ios - 如何将负零与正零分开?

ios - UITableView cellForRowAt 在 numberOfRowsInSection 之前

ios - applicationWillEnterForeground 使我的应用程序崩溃后更改 IBOutlets 值

ios - 在watchOS上使用SiriKit

ios - 选择 TableView 中的每个单元格时呈现不同的 View

ios - 在运行时使用按钮更改应用程序语言

xcode - 类型 'GameScene' 的值在 ReplayKit 上没有成员 'previewViewController'

swift - 如何让用户拍照并分享?

swift - SpriteKit : How can I make my HUD following my camera?

iOS - 以编程方式在具有自动布局的 UITextField 中定位 UIImageView