Xcode 15 以后使用ColorResource/Image

2024-03-24  本文已影响0人  Minoz_min

通过Color Set设置颜色

image.png

Xcode 15之前设置

通过字符串名字硬编码的方式

UIColor(named: "primary")

Xcode 15之后

最低支持iOS 11.0,系统会自动生成枚举值,通过枚举值设置

#if canImport(UIKit)
@available(iOS 11.0, tvOS 11.0, *)
@available(watchOS, unavailable)
extension UIKit.UIColor {

    /// Initialize a `UIColor` with a color resource.
    convenience init(resource: ColorResource) {
#if !os(watchOS)
        self.init(named: resource.name, in: resource.bundle, compatibleWith: nil)!
#else
        self.init()
#endif
    }
}

代码中使用

UIColor

let color = UIColor(resource: .primary)
#import "GeneratedAssetSymbols.h"

UIColor *color = [UIColor colorNamed:ACColorNamePrimary];

UIImage

let image = UIImage(resource: .flashsaleDetail)
#import "GeneratedAssetSymbols.h"

UIImage *image = [UIImage imageNamed:ACImageNameHomeIcFlashdeal];

xib中使用

image.png

在xib中选择颜色后会自动生成以下这段代码:

<resources>
    <namedColor name="textMain">
        <color red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
    </namedColor>
</resources>

对应颜色设置代码为:

<color key="textColor" name="textMain"/>

命名规范

查看了GeneratedAssetSymbols.swfitImageResource的命名,系统会自动转换(建议统一使用小驼峰命名),规则如下:

static let _11Sale = ImageResource(name: "11sale", bundle: resourceBundle)
static let COD = ImageResource(name: "COD", bundle: resourceBundle)
static let apple = ImageResource(name: "apple", bundle: resourceBundle)
static let aqsInstagramActivity = ImageResource(name: "AQSInstagramActivity", bundle: resourceBundle)
static let flashsaleDetail = ImageResource(name: "FlashsaleDetail", bundle: resourceBundle)
static let verifideBuyer = ImageResource(name: "Verifide-Buyer", bundle: resourceBundle)
static let aboutShippingTimeIcon = ImageResource(name: "about_shipping_time_icon", bundle: resourceBundle)
上一篇下一篇

猜你喜欢

热点阅读