gpt4 book ai didi

swift - 单击按钮时我需要删除内部阴影

转载 作者:行者123 更新时间:2023-11-30 11:24:01 30 4
gpt4 key购买 nike

这是我的扩展,用于将内部阴影添加到按钮中。我创建了所有我希望我的阴影进入按钮或 View 的情况。

public extension UIView

{ //不同的内阴影样式 公共(public)枚举innerShadowSide { 全部情况、左、右、顶部、底部、顶部和左、顶部和右、底部和左、底部和右、除了左、除了右、除了顶部、除了底部 }

// define function to add inner shadow
public func addInnerShadow(onSide: innerShadowSide, shadowColor: UIColor, shadowSize: CGFloat, cornerRadius: CGFloat = 0.0, shadowOpacity: Float) -> CAShapeLayer

{
// define and set a shaow layer
let shadowLayer = CAShapeLayer()
shadowLayer.frame = bounds
shadowLayer.shadowColor = shadowColor.cgColor
shadowLayer.shadowOffset = CGSize(width: 0.0, height: 0.0)
shadowLayer.shadowOpacity = shadowOpacity
shadowLayer.shadowRadius = shadowSize
shadowLayer.fillRule = kCAFillRuleEvenOdd

// define shadow path
let shadowPath = CGMutablePath()

// define outer rectangle to restrict drawing area
let insetRect = bounds.insetBy(dx: -shadowSize * 2.0, dy: -shadowSize * 2.0)

// define inner rectangle for mask
let innerFrame: CGRect = { () -> CGRect in
switch onSide
{

case .all:
return CGRect(x: 0.0, y: 0.0, width: frame.size.width, height: frame.size.height)
case .left:
return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 4.0)
case .right:
return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 4.0)
case .top:
return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 4.0, height: frame.size.height + shadowSize * 2.0)
case.bottom:
return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 4.0, height: frame.size.height + shadowSize * 2.0)
case .topAndLeft:
return CGRect(x: 0.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
case .topAndRight:
return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
case .bottomAndLeft:
return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
case .bottomAndRight:
return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
case .exceptLeft:
return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height)
case .exceptRight:
return CGRect(x: 0.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height)
case .exceptTop:
return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width, height: frame.size.height + shadowSize * 2.0)
case .exceptBottom:
return CGRect(x: 0.0, y: 0.0, width: frame.size.width, height: frame.size.height + shadowSize * 2.0)
}
}()

// add outer and inner rectangle to shadow path
shadowPath.addRect(insetRect)
shadowPath.addRect(innerFrame)

// set shadow path as show layer's
shadowLayer.path = shadowPath

// add shadow layer as a sublayer
layer.addSublayer(shadowLayer)

// hide outside drawing area
clipsToBounds = true

return shadowLayer

}

}当我第一次看到我的按钮时,我使用这样的代码:在本例中,我希望所有按钮都有阴影,并且我使用黑色。

var shadowLayer : CAShapeLayer?

self.shadowLayer = okButton.addInnerShadow(onSide: UIView.innerShadowSide.all, shadowColor: UIColor.black, shadowSize: 10.0, shadowOpacity: 10.0)

当我单击按钮进入我的函数时,我需要删除这个内部阴影:

       @IBAction func btnAction(_ sender: DLRadioButton) {
if sender.tag == 1
{
statoBici = "ok"
print(statoBici)
setConfermaButton()
self.shadowLayer.removeFromSuperLayer()


}

最佳答案

修改您的 UIView 函数以返回 CAShapeLayer:

public func addInnerShadow(onSide: innerShadowSide, shadowColor: UIColor, shadowSize: CGFloat, cornerRadius: CGFloat = 0.0, shadowOpacity: Float) -> CAShapeLayer
{
.
.
.
return shadowLayer
}

然后向您的类添加变量或成员变量:

class ViewController: UIViewController {
var shadowLayer : CAShapeLayer!



override func viewDidLoad() {
super.viewDidLoad()
self.shadowLayer = btnShadow.addInnerShadow(onSide: UIView.innerShadowSide.all, shadowColor: UIColor.black, shadowSize: 10.0, shadowOpacity: 10.0)
}
}

最后,从按钮中删除阴影层:

  @IBAction func btnAction(_ sender: Any) {
if let btn = sender as? UIButton
{
if btn.tag == 1 {
self.shadowLayer.removeFromSuperlayer()
}
}
}

enter image description here enter image description here

关于swift - 单击按钮时我需要删除内部阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958186/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com