SwiftUI 금은동을 코드로 표현하기

소개



일본중이 도쿄 올림픽 응원 무드로 큰 분위기.
거리 가는 사람들의 화제도 올림픽 테마로 가지고 있습니다.
어느 선수가 메달을 취할지, 지금부터 슈퍼 재미로 밤에도 잠을 잘 수 없습니다 😂
그런데, 그런 경기 좋은 일본을 뒷받침하기 위해 iOS 앱에서도 금색, 은색, 구리색 을 사용하고 싶다, 그래서 SwiftUI 에서 Gold, Silver, Bronze 를 사용해 가고 싶습니다.



사용법



색을 칠하려는 View에 .shine(ShineColor)를 추가합니다.
  • 황금: .shine(.gold)
  • 은빛: .shine(.silver)
  • 구리 색: .shine(.bronze)

  • Sample.swift
    // 例: 金色のテキスト "GOLD"
    Text("GOLD")
        .shine(.gold)
    
    // 例: 銀色の四角形 ■
    Rectangle()
        .shine(.silver)
    

    Copipe 코드



    둥글게 뻗어서 프로젝트 안의 어딘가에서 주세요.

    ShineColor.Swift
    import SwiftUI
    enum ShineColor {
        case gold
        case silver
        case bronze
        var colors: [Color] {
            switch self {
            case .gold: return [ Color(hex: 0xDBB400),
                                 Color(hex: 0xEFAF00),
                                 Color(hex: 0xF5D100),
                                 Color(hex: 0xE0CA82),
                                 Color(hex: 0xD1AE15),
                                 Color(hex: 0xDBB400),
            ]
            case .silver: return [ Color(hex: 0x70706F),
                                   Color(hex: 0x7D7D7A),
                                   Color(hex: 0xB3B6B5),
                                   Color(hex: 0x8E8D8D),
                                   Color(hex: 0xB3B6B5),
                                   Color(hex: 0xA1A2A3),
            ]
            case .bronze: return [ Color(hex: 0x804A00),
                                   Color(hex: 0x9C7A3C),
                                   Color(hex: 0xB08D57),
                                   Color(hex: 0x895E1A),
                                   Color(hex: 0x804A00),
                                   Color(hex: 0xB08D57),
            ]}
        }
        var linearGradient: LinearGradient
        {
            return LinearGradient(
                gradient: Gradient(colors: self.colors),
                startPoint: .topLeading,
                endPoint: .bottomTrailing
            )
        }
    }
    extension View {
        func shine(_ color: ShineColor) -> some View {
            ZStack {
                self.opacity(0)
                color.linearGradient.mask(self)
            }.fixedSize()
        }
    }
    fileprivate extension Color {
        init(hex: UInt, alpha: Double = 1) {
            self.init( .sRGB,
                       red: Double((hex >> 16) & 0xff) / 255,
                       green: Double((hex >> 08) & 0xff) / 255,
                       blue: Double((hex >> 00) & 0xff) / 255,
                       opacity: alpha )
        }
    }
    

    사이고에게



    불요 불급의 외출은 삼가합시다.

    좋은 웹페이지 즐겨찾기