ButtonUp, ButtonDown ๐Ÿ“ฆ

็”จไพ†็•ถไฝœ Tab Bar Button ๅฝˆ่ตท่ˆ‡ๆŒ‰ไธ‹็š„ๅ…ฉๅ€‹็‹€ๆ…‹๏ผŒ้€™ๅ…ฉๅ€‹ๅชๆ˜ฏๅ–ฎ็ด”็š„ View ่€Œๅทฒ๏ผŒ้‚„ไธ่ƒฝ็œŸ็š„ๆŒ‰ใ€‚

import SwiftUI
import ViewModifiers

public struct ButtonUp: View {
    
    // button properties
    let size: CGFloat      // icon size
    let icon: String       // icon name (SF Symbol)
    
    // public init
    public init(icon: String, size: CGFloat = 32){
        self.icon = icon
        self.size = size
    }
    
    // button body
    public var body: some View {
        ZStack {
            
            // 1. ็”จๆผธๅฑค็‚บๅบ•็ด™๏ผŒ้ฎๅœจๅœ–็คบไธ‹้ข
            Neu.buttonUpIconBackground
                .frame(width: size, height: size)  // ้€™ๅ€‹ๅคงๅฐๅชๅค ้ฎไฝ icon
            
            // 2. ๅ†้‹ชไธŠๆŒ–ๆดž็š„ๆ–น็ด™
            Rectangle()
                .foregroundColor(Neu.color.cardBackground)         // ไธŠ่‰ฒ
                .frame(width: size * 2, height: size * 2)          // ๆ–น็ด™็‚บๅœ–็คบ็š„ๅ…ฉๅ€ๅคง
                .inverseMask(IconCard(icon, size: size))           // ไปฅๅœ–็คบๆŒ–ๆดž
                // shadow & highlight
                .shadow(color: Neu.color.iconShadow, radius: 6, x: 6, y: 6)
                .shadow(color: .white, radius: 3, x: -3, y: -3)
                .cornerRadius(size * 0.5)                          // ๅ‰ชๅœ“่ง’
            
        } // container (ZStack)
            // โญ๏ธ ๅˆไฝตๆ‰€ๆœ‰ๅœ–ๅฑค๏ผˆ็‚บไบ†ๅนซๆ•ดๅ€‹ ZStack ่ฃฝไฝœ้™ฐๅฝฑ๏ผ‰
            .compositingGroup()
            // โญ๏ธ ่ฎ“ๆ‰“ๅ…‰่ˆ‡้™ฐๅฝฑ้ƒฝใ€Œๆ”ถๆ–‚ใ€ไธ€้ปž๏ผˆradius ๅคง๏ผŒx y ๅฐ๏ผ‰
            .shadow(color: Color.white.opacity(0.9), radius: 4, x: -2, y: -2)
            .shadow(color: Neu.color.iconShadow.opacity(0.9), radius: 4, x: 2, y: 2)
    }
}

Last updated