【发布时间】:2020-07-09 09:56:30
【问题描述】:
现在我正在设计带有渐变层的按钮,如图所示 我有两个问题
1-当我向按钮添加渐变层时,文本消失,如上图所示
2-我创建的渐变层不喜欢设计的颜色左侧在真正的设计alpha小于右侧,我添加了正确的代码但没有显示我想要的
-这个参数我正在使用什么
@IBDesignable
class buttonGeneralDesign: UIButton {
private var gradientLayer: CAGradientLayer!
@IBInspectable
var cornerRadius: CGFloat = 0.0{
didSet{
self.layer.cornerRadius = cornerRadius
self.clipsToBounds = false
}
}
@IBInspectable
var borderColor: UIColor = .clear {
didSet {
self.layer.borderColor = borderColor.cgColor
}
}
@IBInspectable
var borderWidth: CGFloat = 0.0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
@IBInspectable
var shadowColor: UIColor = .clear {
didSet {
self.layer.shadowColor = shadowColor.cgColor
}
}
@IBInspectable
var shadowRadius: CGFloat = 0.0 {
didSet{
self.layer.shadowRadius = shadowRadius
}
}
@IBInspectable
var shadowOpacity: Float = 0.0 {
didSet{
self.layer.shadowOpacity = shadowOpacity
}
}
@IBInspectable
var shadowOffset: CGSize = CGSize.zero{
didSet{
self.layer.shadowOffset = shadowOffset
}
}
@IBInspectable var topColor: UIColor = .red {
didSet {
setNeedsLayout()
}
}
@IBInspectable var bottomColor: UIColor = .yellow {
didSet {
setNeedsLayout()
}
}
@IBInspectable var startPointX: CGFloat = 0 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var startPointY: CGFloat = 0.5 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var endPointX: CGFloat = 1 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var endPointY: CGFloat = 0.5 {
didSet {
setNeedsLayout()
}
}
// override class var layerClass: AnyClass {
// return CAGradientLayer.self
// }
override func layoutSubviews() {
self.gradientLayer = CAGradientLayer()
self.gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor]
self.gradientLayer.startPoint = CGPoint(x: startPointX, y: startPointY)
self.gradientLayer.locations = [0,1]
self.gradientLayer.endPoint = CGPoint(x: endPointX, y: endPointY)
self.gradientLayer.position = self.center
self.layer.insertSublayer( self.gradientLayer, at: 0)
}
}
-这才是真正的设计
这是应用程序的输出
【问题讨论】:
-
self.gradientLayer.position = self.center你应该改用self.gradientLayer.frame = self.bounds我认为这才是问题所在。 -
非常感谢第二个问题已经解决了。文本为什么没有出现呢?
-
stackoverflow.com/questions/4780310/… 显然,您需要插入 eh 子层来比较标题,否则它将在上面。
-
在我将 self.gradientLayer.frame = self.bounds 添加到代码后,当我按下按钮时颜色变为白色@Larme
标签: swift xcode core-graphics swift5