簡體   English   中英

如何簡化這個長 UIbutton 代碼?

[英]How do I simplify this long UIbutton code?

我嘗試創建 5 個 UIbutton(實際上是 12 個,但代碼太長了,所以我剪成 5 個。都是一樣的)並使其角變圓並添加陰影

但我認為有更好的方法來簡化這個長代碼

請幫忙。 謝謝

類視圖控制器:UIViewController {

@IBOutlet weak var button: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!
@IBOutlet weak var button4: UIButton!
@IBOutlet weak var button5: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
       
    button.layer.cornerRadius = 35
    button.layer.shadowRadius = 5
    button.layer.shadowColor = UIColor.black.cgColor
    button.layer.shadowOpacity = 0.5
    button.layer.shadowOffset = CGSize(width:0, height:1)
    button.layer.masksToBounds = false
    
    button2.layer.cornerRadius = 35
    button2.layer.shadowRadius = 5
    button2.layer.shadowColor = UIColor.black.cgColor
    button2.layer.shadowOpacity = 0.5
    button2.layer.shadowOffset = CGSize(width:0, height:1)
    button2.layer.masksToBounds = false
    
    button3.layer.cornerRadius = 35
    button3.layer.shadowRadius = 5
    button3.layer.shadowColor = UIColor.black.cgColor
    button3.layer.shadowOpacity = 0.5
    button3.layer.shadowOffset = CGSize(width:0, height:1)
    button3.layer.masksToBounds = false
    
    button4.layer.cornerRadius = 35
    button4.layer.shadowRadius = 5
    button4.layer.shadowColor = UIColor.black.cgColor
    button4.layer.shadowOpacity = 0.5
    button4.layer.shadowOffset = CGSize(width:0, height:1)
    button4.layer.masksToBounds = false
    
    button5.layer.cornerRadius = 35
    button5.layer.shadowRadius = 5
    button5.layer.shadowColor = UIColor.black.cgColor
    button5.layer.shadowOpacity = 0.5
    button5.layer.shadowOffset = CGSize(width:0, height:1)
    button5.layer.masksToBounds = false

簡單地創建一個方法並調用它

[button,button2].forEach({self.createButton($0)})

func createButton(_ button: UIButton, radius: CGFloat = 35, shadowRadius: CGFloat = 5, shadowColor: UIColor = UIColor.black, shadowOpacity: Float = 0.5, shadowOffSet: CGSize = CGSize(width: 0, height: 1)){
    
    button.layer.cornerRadius = radius
    button.layer.shadowRadius = shadowRadius
    button.layer.shadowColor = shadowColor.cgColor
    button.layer.shadowOpacity = shadowOpacity
    button.layer.shadowOffset = shadowOffSet
    button.layer.masksToBounds = false
    
}

您可以簡單地使用數組

[button1,button2..].forEach { button in
    button.layer.cornerRadius = 35
    button.layer.shadowRadius = 5
    button.layer.shadowColor = UIColor.black.cgColor
    button.layer.shadowOpacity = 0.5
    button.layer.shadowOffset = CGSize(width:0, height:1)
    button.layer.masksToBounds = false
}

或使用方法,如果您需要為不同的按鈕傳遞不同的參數

setupButton(button1)
setupButton(button2)

func setupButton(_ button: UIButton) {
    button.layer.cornerRadius = 35
    button.layer.shadowRadius = 5
    button.layer.shadowColor = UIColor.black.cgColor
    button.layer.shadowOpacity = 0.5
    button.layer.shadowOffset = CGSize(width:0, height:1)
    button.layer.masksToBounds = false
}

創建一個函數來完成重復性工作。 像這樣的東西:

@IBOutlet weak var button: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!
@IBOutlet weak var button4: UIButton!
@IBOutlet weak var button5: UIButton!

//...
func configure(button: UIButton) {
    button.layer.cornerRadius = 35
    button.layer.shadowRadius = 5
    button.layer.shadowColor = UIColor.black.cgColor
    button.layer.shadowOpacity = 0.5
    button.layer.shadowOffset = CGSize(width:0, height:1)
    button.layer.masksToBounds = false
}

[button, button2, button3, button4, button5].forEach { configure(button:$0) }

您始終可以繼承 UIButton 並創建自己的自定義按鈕:

class CustomButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        layer.cornerRadius = 35
        layer.shadowRadius = 5
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOpacity = 0.5
        layer.shadowOffset = CGSize(width:0, height:1)
        layer.masksToBounds = false
    }
}

@IBOutlet weak var button: CustomButton!
@IBOutlet weak var button2: CustomButton!
@IBOutlet weak var button3: CustomButton!
@IBOutlet weak var button4: CustomButton!
@IBOutlet weak var button5: CustomButton!

也許你可以在 swift 5.3 中使用可變參數來嘗試這個

@IBOutlet weak var button: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!
@IBOutlet weak var button4: UIButton!
@IBOutlet weak var button5: UIButton!

//...
func configure(buttons: UIButton...) {
    for button in buttons {
        button.layer.cornerRadius = 35
        button.layer.shadowRadius = 5
        button.layer.shadowColor = UIColor.black.cgColor
        button.layer.shadowOpacity = 0.5
        button.layer.shadowOffset = CGSize(width:0, height:1)
        button.layer.masksToBounds = false
    }
}
configure(button, button1, button2, button3, button4, button5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM