programing

자산 카탈로그 색상 집합을 어떻게 사용할 수 있습니까?

elecom 2023. 9. 10. 11:57
반응형

자산 카탈로그 색상 집합을 어떻게 사용할 수 있습니까?

저는 보통 스위프트와 함께 확장을 사용하여 iOS에서 커스텀 UI 컬러를 사용하지만, 이제 iOS 11/Xcode 9를 사용하면 컬러 세트를 만들 수 있습니다.어떻게 사용할 수 있을까요?

업데이트 - 팁

@Cœur의 말에 따르면, 컬러를 드래그 앤 드롭하여 UIColor 객체처럼 사용할 수 있으며, 가능한 솔루션은 이를 확장으로 사용할 수 있습니다.

UIColor as an extension

또는 상수로서:

UIColor as a constant

이제 자산 이미지에 대한 UI 이미지 액세스처럼 액세스할 수 있는지 여부를 알고 싶습니다. 다음과 같습니다.

UIImage(named: "image-name") -> UIColor(named: "color-name")
UIColor(named: "myColor") 

출처: WWDC 2017 Session 237 —— MapKit의 새로운 기능


주의 사항: 프로젝트의 배포 대상을 iOS 11.0으로 설정해야 합니다.

(질문 업데이트에 대한 짧은 답변: Xcode 9.0에 있습니다.)

원래 질문에 대한 답변:

  1. 당신은 당신의 컬러 세트를 만듭니다.

enter image description here

  1. 토막글에서 자신의 색을 찾아서 드래그 앤 드롭합니다.

enter image description here

  1. 소스 코드를 볼 때 색상 리터럴로 변환됩니다.

    #colorLiteral(red: 0, green: 0.6378085017, blue: 0.8846047521, alpha: 1)

빨강, 초록, 파랑의 값이 어떻게 다른지 알아채셨나요?색 공간을 이용해서 정의를 내렸기 때문입니다.Display P3, Literal은 Color Space를 사용하고 있습니다.sRGB.

Xcode 11 press command + shift + L에서 토막글을 열고 이미지 드래그 앤 드롭에 표시된 것처럼 마지막 하나를 선택합니다.

enter image description here

쇼트 버전

자산 카탈로그에 색상 세트를 추가하고 이름을 지정한 후 속성 검사기에 색상을 설정한 다음 코드에 다음과 같이 호출합니다.UIColor(named: "MyColor").

전체 지침

  1. 자산 카탈로그 뷰어에서 기본 패널의 오른쪽 하단에 있는 더하기 버튼을 클릭하고 새 색상 세트를 선택합니다.

    New Color Set menu

  2. 흰색 사각형을 클릭하고 Attributes Inspector(오른쪽 창에서 맨 오른쪽 아이콘)를 선택합니다.

  3. 거기서 이름을 짓고 색상을 선택할 수 있습니다.

    enter image description here

  4. 코드에 사용하려면 다음과 같이 호출합니다.UIColor(named: "MyColor"). 이렇게 하면 옵션이 반환되므로 대부분의 경우 포장을 해제해야 합니다(자산 카탈로그에 색상이 있는 것을 감안하면 강제 포장 해제가 허용되는 몇 안 되는 경우 중 하나일 것입니다).

이거 써야 돼요.

그리고 UIColor extension에서 간단한 접근을 위한 기능을 만들 수 있습니다.

enum AssetsColor {
   case yellow
   case black
   case blue
   case gray
   case green
   case lightGray
   case separatorColor
   case red
}

extension UIColor {

    static func appColor(_ name: AssetsColor) -> UIColor? {
        switch name {
        case .yellow:
            return UIColor(named: "appYellow")
        case .black:
            return UIColor(named: "appBlack")
        case .blue:
            return UIColor(named: "appBlue")
        case .gray:
            return UIColor(named: "appGray")
        case .lightGray:
            return UIColor(named: "appLightGray")
        case .red:
            return UIColor(named: "appRed")
        case .separatorColor:
            return UIColor(named: "appSeparatorColor")
        case .green:
            return UIColor(named: "appGreen") 
        }
    }
}

다음과 같이 사용할 수 있습니다.

userNameTextField.textColor = UIColor.appColor(.gray)

이 방법으로 간단한 접근이 가능합니다(swift 4 & swift 5).

enum AssetsColor: String {
    case backgroundGray
    case blue
    case colorAccent
    case colorPrimary
    case darkBlue
    case yellow
}

extension UIColor {
    static func appColor(_ name: AssetsColor) -> UIColor? {
         return UIColor(named: name.rawValue)
    }
}

사용방법:

userNameTextField.textColor = UIColor.appColor(.blue)
 // iOS
 let color = UIColor(named: "SillyBlue")

 // macOS
 let color = NSColor(named: "SillyBlue")

리터럴을 사용하여 이미지와 같은 색상 자산에 접근할 수 있는지 질문을 위해 Xcode 10.2 기준으로 입력할 수 있습니다.colorliteral 관리자 할 수 . 에 할 을 할 할 을 할 .

sample snippet

사용시 Swift Package에서 색상 로딩이 지연되는 경우UIColor(named:):

하지만, 패키지로 , Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ Δ Δ Δ Δ ΔUIColor(named: "example_name"). 사용하는 경우UIColor(named: "background", in: Bundle.module, compatibleWith: .current)모듈을 목표로 하는 오버로드가 발생하면 색상이 지체 없이 즉시 로드됩니다.

참고: Xcode 12.1에서 경험했습니다.

속히UI는 클래스를 만들고 이름을 지정합니다: Color+extension and extension Color :

import SwiftUI

extension Color {
    static let background = Color("BackgroundColor")
    static let whiteColor = Color("WhiteColor")
    static let blackColor = Color("BackgroundColor")
    static let primery = Color("PrimeryColor")
    static let secondaryColor = Color("SecondaryColor")    
}

자산의 색상을 압축 해제하는 기능으로 확장 기능을 만들어 앱의 모든 색상과 함께 사용할 수 있습니다.

extension UIColor {
    static var someColor: UIColor {
        return UIColor.color(name: "SomeColor")
    }

    private static func color(name: String) -> UIColor {
        guard let color = UIColor(named: name) else {
            return .black
        }
        return color
    }
}

사용 예:

UIColor.someColor

아니면

someLabel.textColor = .someColor

아니면, 스위프트와 함께.UI 구조, 자산 이름으로 이니셜라이저를 호출하기만 하면 됩니다.

Color("background")

언급URL : https://stackoverflow.com/questions/44397680/how-can-we-use-assets-catalog-color-sets

반응형