import SwiftUI
// (internal) view modifier
struct NSFW: ViewModifier {
// โญ๏ธ ่ฒ ่ฒฌ่ฆไธ่ฆๅฅ็จใๆจก็ณใๆๆ
@State private var blur = true
// body
func body(content: Content) -> some View {
content
.blur(radius: blur ? 20 : 0) // โญ๏ธ ๆจก็ณๆๆ
.clipped() // โญ๏ธ ไธ่ฎๆจก็ณๆๆๆดๆฃๅบๅป
.overlay(nsfwText) // โญ๏ธ ๅ็ไธๆๅญ
// โญ๏ธ ๅฉ็จ่งธๆงๆงๅถใๆจก็ณใๆๆ
.onTapGesture {
withAnimation { // โญ๏ธ ๅ็จใๅ็ซใๆๆ
self.blur.toggle() // โญ๏ธ ๅๆ `blur`
}
}
}
// overlay text
var nsfwText: some View {
VStack {
Image(systemName: "eye.slash.fill")
Text("NSFW").font(.caption)
}
.foregroundColor(.white)
.opacity(blur ? 1 : 0) // โญ๏ธ ้กฏ็คบๆ้ฑ่ๆๅญ
}
}
// view modifier helper
extension View {
public func nsfw() -> some View { modifier(NSFW()) }
}