【问题标题】:Gradient layer is not working in iOS渐变层在 iOS 中不起作用
【发布时间】:2018-02-28 10:25:29
【问题描述】:

我有制作渐变的代码,但它根本没有显示。如果我改变持有该渐变的视图颜色,我可以看到它。所以视图很好,只是渐变有一些问题。这是我的代码:

class KolodaCardView: UIView {
    var helloWorld = "Hello World"
    var userImage = UIImageView()
    var userName = UILabel()
    var parent = UIView()
    var gradient = CAGradientLayer()
    var gradientView = UIView()

    override init(frame: CGRect) {
        super.init(frame: frame)
        parent = self
        parent.backgroundColor = .clear
        parent.layer.cornerRadius = 16
        parent.clipsToBounds = true

        setupUserImage()
        setupUserName()
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        gradient.frame = gradientView.frame
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func setupUserImage() {
        parent.addSubview(userImage)
        userImage.snp.makeConstraints { make in
            make.top.equalTo(parent)
            make.bottom.equalTo(parent)
            make.left.equalTo(parent)
            make.right.equalTo(parent)
        }
        userImage.contentMode = .scaleAspectFill
        userImage.clipsToBounds = true
        userImage.layer.cornerRadius = 16

        userImage.addSubview(gradientView)
        gradientView.snp.makeConstraints { (make) in
            make.bottom.equalToSuperview()
            make.left.equalToSuperview()
            make.right.equalToSuperview()
            make.height.equalTo(60)
        }
//        gradientView.backgroundColor = .green
        gradient.startPoint = CGPoint(x: 0, y: 0)
        gradient.endPoint = CGPoint(x: 0, y: 1)
        gradient.locations = [0.5,1.0]
        gradient.frame = gradientView.bounds
        gradient.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
        gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
        gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
        gradientView.layer.insertSublayer(gradient, at: 0)
    }

    func setupUserName() {
        parent.addSubview(userName)
        userName.snp.makeConstraints { (make) in
            make.left.equalTo(parent).offset(16)
            make.right.equalTo(parent)
            make.height.equalTo(20)
            make.bottom.equalTo(-20)
        }
        userName.textColor = .black
        userName.textAlignment = .left
    }
}

我在这里检查了几个解决方案,但没有任何效果!有人可以检查一下我是否忽略了某些东西吗?

【问题讨论】:

  • “如果我改变持有该渐变的视图颜色”如何?难道是insertSublayer(gradient, at: 0)使用的索引不对?
  • userImage.addSubview(gradientView) 最后在执行渐变色任务时添加此视图
  • 你在哪里调用那个方法???
  • 我将代码添加到layoutSubviews(),但仍然没有任何变化。
  • @Kira 请用您的最新代码更新您的问题

标签: ios swift gradient


【解决方案1】:

在 Gradient 中,您必须给出渐变颜色的位置,以填充图层的起点到终点。

gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 0, y: 1)
gradientLayer.colors =  [UIColor.red.cgColor ,UIColor.yellow.cgColor]
gradientLayer.locations = [0.5,1.0]
your_gradientView.layer.insertSublayer(gradientLayer, at: 0)

【讨论】:

  • 即使您的代码 sn-p 解决了问题,您也应该说明 sn-p 的作用...
  • 我已经尝试过定位,但没有成功。我又试了一次,仍然不想显示任何内容。
  • @Kira 我只是更新你的问题只需用这个替换你的文件并运行应用程序并显示输出
  • 它不起作用。我将在几秒钟内发布我的图层图像。
  • @Kira 你告诉我们你想创建什么样的渐变层,所以我们为你的问题提供最佳解决方案
猜你喜欢
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多