【发布时间】:2017-10-16 11:32:42
【问题描述】:
我正在为一个更大的应用程序练习渐变背景,并创建了这个虚拟应用程序来简化概念。该视图具有 50/50 渐变背景和 2 行彩色按钮。
我希望用户能够通过点击上下按钮来使用渐变的颜色,以便渐变背景根据按钮颜色而变化。
ViewController 的代码如下:
import UIKit
class ViewController: UIViewController {
var currentUpperColor = UIColor.black
var currentLowerColor = UIColor.white
override func viewDidLoad() {
super.viewDidLoad()
setGradientBackground(lowerColor: currentLowerColor, upperColor: currentUpperColor)
}
func setGradientBackground(lowerColor: UIColor, upperColor: UIColor) {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = view.bounds
gradientLayer.colors = [lowerColor.cgColor, upperColor.cgColor]
gradientLayer.locations = [0.5, 1.0]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)
view.layer.insertSublayer(gradientLayer, at: 0)
}
@IBAction func upperColorPicked(_ sender: UIButton) {
currentUpperColor = sender.backgroundColor!
setGradientBackground(lowerColor: currentLowerColor, upperColor: currentUpperColor)
}
@IBAction func lowerColorPicked(_ sender: UIButton) {
currentLowerColor = sender.backgroundColor!
setGradientBackground(lowerColor: currentLowerColor, upperColor: currentUpperColor)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
但是当应用程序运行时,点击按钮时没有任何反应。我知道应该会发生某种视图重绘,但我不知道如何调用它。
【问题讨论】:
-
你累了吗
layoutSubviews? -
我认为您每次都在插入一个新的“子图层”,这就是 UI 不会改变的原因。
-
您是否尝试过删除之前的渐变(=layout)?你只是总是在当前渐变下插入一个新的渐变(在 z 级别),当然它是不可见的,因为另一层覆盖了它。
标签: ios swift uiview gradient layer