UIButton.backgroundColorでボタンの背景色を設定するとボタンをプレスした時の色の反応が見えないため、UIColorからUIImageを作成し、UIButtonのバックグラウンドイメージを設定する簡単なコードを作成しました。
参考にした記事はこちら。
import UIKit
class ViewController: UIViewController {
lazy var button: UIButton = {
let button = UIButton()
let buttonColor = UIColor.link
let uiImage = createUIImageFromUIColor(color: buttonColor) // UIColorからUIImageを作成
button.setBackgroundImage(uiImage, for: .normal)
// ボタンにアイコンイメージを指定する場合
button.setImage(UIImage(systemsName: "heart.fill"))
// イメージサイズを可変にする場合
button.imageView?.contentMode = .scaleAspectFit
button.contentHorizontalAlignment = .fill
button.contentVerticalAlignment = .fill
// アイコンの色を指定
button.tintColor = UIColor.systemPink
// ボーダーを指定する場合
button.layer.borderColor = UIColor.black
button.layer.borderWidth = 1
// ボタンにテキストを指定する場合
button.setTitle("Button", for: .normal)
button.setTitleColor(.white, for: .normal)
// コーナーを丸くする場合
button.layer.cornerRadius = 20
button.layer.masksToBounds = true
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
button.widthAnchor.constraint(equalToConstant: 100).isActive = true
button.heightAnchor.constraint(equalToConstant: 50).isActive = true
}
private func createUIImageFromUIColor(color: UIColor) -> UIImage? {
let size = CGSize(width: 200, height: 200)
var colorImage: UIImage?
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
if let context = UIGraphicsGetCurrentContext() {
context.setFillColor(color.cgColor)
context.fill(CGRect(origin: .zero, size: size))
colorImage = UIGraphicsGetImageFromCurrentImageContext()
}
UIGraphicsEndImageContext()
return colorImage
}
}