Swift - 使用渐变
问题描述:
我遇到了涉及设置标签和按钮渐变的问题。我知道这个问题已经被问了很多,但没有答案似乎解决了我的问题。这里是屏幕,我希望它看起来:Swift - 使用渐变
这是我的代码:
@IBOutlet weak var loginButton: UIButton!
@IBOutlet weak var signUpButton: UIButton!
@IBOutlet weak var logoLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
loginButton.backgroundColor = UIColor.clear
let loginButtonGradient = createBlueGreenGradient(from: loginButton.bounds)
self.view.layer.insertSublayer(loginButtonGradient, at: 0)
signUpButton.backgroundColor = UIColor.clear
let signUpButtonGradient = createBlueGreenGradient(from: signUpButton.bounds)
self.view.layer.insertSublayer(signUpButtonGradient, at: 0)
logoLabel.backgroundColor = UIColor.clear
let logoLabelGradient = createBlueGreenGradient(from: logoLabel.bounds)
self.view.layer.insertSublayer(logoLabelGradient, at: 0)
loginButton.layer.cornerRadius = 100
signUpButton.layer.cornerRadius = 100
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{
let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1)
let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1)
let gradientColors: [UIColor] = [topColor, bottomColor]
let gradientLocations: [NSNumber] = [0.0, 1.0]
let gradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
gradientLayer.frame = bounds
return gradientLayer
}
这是错误的结果:
有人请帮我。我不确定我做错了什么。
答
有许多问题与您的代码。
- 鸿沟与
Float
号而不是Int
颜色意味着它应该是255.0
不255
。 - 现在为
colors
CAGradientLayer
属性您需要设置CGColor
的数组而不是UIColor
的数组。 - 还设置
startPoint
和endPoint
属性CAGradientLayer
使水平渐变颜色。 - 当前您将在您的
self.view
中添加此GradientLayer
而不是其特定的按钮。 - 还设置
cornerRadius
您还需要设置图层的masksToBounds
属性true
后设置的按钮cornerRadius
其高度不的基础上与某个常数100
。 - 现在为您的标志标签,你可以不设置
textColor
为Gradient
颜色,你需要做的就是画上一个UIImage
所需的梯度,然后使用该UIImage
设置颜色模式为您Label
检查这个SO reference为直接的东西。
使这一切后改变你的代码应该是这样的。
func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{
let topColor = UIColor(red: 84/255.0, green: 183/255.0, blue: 211/255.0, alpha: 1).cgColor
let bottomColor = UIColor(red: 119/255.0, green: 202/255.0, blue: 151/255.0, alpha: 1).cgColor
let gradientColors = [topColor, bottomColor]
let gradientLocations: [NSNumber] = [0.0, 1.0]
let gradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
//Set startPoint and endPoint property also
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 0)
gradientLayer.frame = bounds
return gradientLayer
}
现在viewDidLoad
这种方式设置gradientLayer
。
override func viewDidLoad() {
super.viewDidLoad()
let loginButtonGradient = createBlueGreenGradient(from: loginButton.bounds)
self.loginButton.layer.insertSublayer(loginButtonGradient, at: 0)
let signUpButtonGradient = createBlueGreenGradient(from: signUpButton.bounds)
self.signUpButton.layer.insertSublayer(signUpButtonGradient, at: 0)
loginButton.layer.cornerRadius = loginButton.frame.size.height/2
loginButton.layer.masksToBounds = true
signUpButton.layer.cornerRadius = signUpButton.frame.size.height/2
signUpButton.layer.masksToBounds = true
}
答
哦,我的天啊,我有同样的问题,但玩过它。这是因为你没有添加.cgcolor
。例如:
let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1).cgColor
let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1).cgColor
let gradientColors = [topColor, bottomColor]
让我知道它是否有效。
+0
是的,这工作谢谢 –
答
你的方法是这样的:
func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{
let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1).cgColor
let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1).cgColor
let gradientColors = [topColor, bottomColor]
let gradientLocations: [NSNumber] = [0.0, 1.0]
let gradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
gradientLayer.frame = bounds
return gradientLayer
}
[如何将渐变应用于iOS Swift App的背景视图](https:// stackoverflow。com/questions/24380535 /如何应用梯度背景视图的IOS - SWIFT应用程序) –