要解决您的问题,通常可以更改代码的以下行,
unsigned long long
到
gradient.frame = myButton.frame
面临该问题的原因是,当您使用视图/按钮的gradient.frame = myButton.bounds
属性时,它提供了视图/按钮相对于其超级视图的原点,可以是任何东西。
使用.frame
属性时,原点基于其自己的视图空间,该视图空间在大多数情况下会以(0,0)点作为原点。但并非总是如此,这使我达成了以下共识,
在使用自动布局时,该解决方案可能仍然会遇到问题,因为布局引擎可以在应用渐变后更改按钮的大小。
一个优雅的解决方案是有一个自定义按钮类,该类将应用于所有应用了渐变的按钮。当视图更新布局时,此类应调整渐变的大小。
.bounds
,
我正在使用此自定义按钮样式来设置渐变。
import UIKit
class CustomButton: UIButton {
init() {
super.init(frame: .zero)
customInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
customInit()
}
private func customInit() {
setupGradient()
}
private func setupGradient() {
let gradient = CAGradientLayer()
gradient.name = "gradient"
gradient.frame = self.bounds
gradient.cornerRadius = self.layer.cornerRadius
gradient.colors = [
UIColor(red: 1.00,green: 0.41,blue: 0.35,alpha: 1.0).cgColor,UIColor(red: 1.00,green: 0.00,blue: 0.67,alpha: 1.0).cgColor
]
gradient.locations = [0,1]
gradient.startPoint = CGPoint(x: 0,y: 0)
gradient.endPoint = CGPoint(x: 1,y: 1)
self.layer.insertSublayer(gradient,at: 0) // insert to the back
}
}
本文链接:https://www.f2er.com/3063805.html