🦋
SwiftUI: macOSの信号機ボタンを再現チャレンジ
- カーソルを乗せると
×
や-
のアイコンが表示される - ボタンを押すと背景色が薄くなる
struct WindowButton: View {
@State private var hovering: Bool = false
var body: some View {
HStack {
colorButton("multiply", Color.red)
colorButton("minus", Color.yellow)
colorButton("arrow.up.left.and.arrow.down.right", Color.green)
}
.onHover { hovering = $0 }
}
func colorButton(_ iconName: String, _ baseColor: Color) -> some View {
ZStack(alignment: .center) {
Image(systemName: "circle.fill")
.font(.system(size: 12, weight: .bold))
.foregroundColor(baseColor)
Button {
} label: {
Image(systemName: "circle.fill")
.font(.system(size: 12, weight: .bold))
.colorMultiply(Color.white.opacity(0.5))
}
.buttonStyle(.borderless)
if hovering {
Image(systemName: iconName)
.font(.system(size: 8, weight: .bold))
.foregroundColor(Color.black.opacity(0.8))
.allowsHitTesting(false)
}
}
.frame(width: 12, height: 12)
}
}
うーんお粗末
Discussion
ずむさんのアドバイスを受けてさらにチャレンジ。
ButtonStyle
を使ってかなりいい線まできました。