封装设置color

本文深入探讨了使用Objective-C进行iOS应用开发的技巧与最佳实践,涵盖了从基本概念到高级特性,包括但不限于:面向对象编程、框架使用、性能优化、内存管理等关键知识点。通过丰富的实例和代码示例,旨在帮助开发者提高应用开发效率,打造高质量的iOS应用。

#define UIColorFromRGB_dec(r,g,b) [UIColor colorWithRed:r/256.f green:g/256.f blue:b/256.f alpha:1.f]

#define UIColorFromRGBA_dec(r,g,b,a) [UIColor colorWithRed:r/256.f green:g/256.f blue:b/256.f alpha:a]

#define UIColorFromRGB_hex(rgbValue) [UIColor \

colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \

green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 \

blue:((float)(rgbValue & 0x0000FF))/255.0 \

alpha:1.0]


#define UIColorFromRGBA_hex(rgbValue, alphaValue) [UIColor \

colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \

green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 \

blue:((float)(rgbValue & 0x0000FF))/255.0 \

alpha:alphaValue]


在 ArkTS 中,`Color` 类通常用于表示颜色值,例如 RGB、RGBA 或 HSL 等格式。为了更好地组织代码和复用颜色处理逻辑,可以对 `Color` 进行封装,使其支持多种颜色格式的创建、转换和操作。以下是实现 `Color` 类封装的方法: ### 封装 Color 类 可以通过定义一个 `Color` 类,提供静态方法用于创建不同格式的颜色实例,并支持颜色值的转换与操作。 ```typescript class Color { private r: number; private g: number; private b: number; private a: number; constructor(r: number, g: number, b: number, a: number = 1.0) { this.r = Math.max(0, Math.min(255, r)); this.g = Math.max(0, Math.min(255, g)); this.b = Math.max(0, Math.min(255, b)); this.a = Math.max(0.0, Math.min(1.0, a)); } // 从 RGB 创建颜色 static fromRGB(r: number, g: number, b: number): Color { return new Color(r, g, b); } // 从 RGBA 创建颜色 static fromRGBA(r: number, g: number, b: number, a: number): Color { return new Color(r, g, b, a); } // 从十六进制字符串创建颜色 static fromHex(hex: string): Color { const sanitizedHex = hex.replace('#', ''); const bigint = parseInt(sanitizedHex, 16); const r = (bigint >> 16) & 255; const g = (bigint >> 8) & 255; const b = bigint & 255; return new Color(r, g, b); } // 获取颜色的 RGBA 表示 toRGBA(): string { return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})`; } // 获取颜色的 HEX 表示 toHEX(): string { const toHex = (c: number) => c.toString(16).padStart(2, '0'); return `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`; } // 调整颜色的亮度 lighten(factor: number): Color { return new Color( this.r + (255 - this.r) * factor, this.g + (255 - this.g) * factor, this.b + (255 - this.b) * factor, this.a ); } // 调整颜色的透明度 fade(opacity: number): Color { return new Color(this.r, this.g, this.b, this.a * opacity); } } ``` ### 使用封装Color 类 可以使用上述封装的 `Color` 类来创建和操作颜色实例: ```typescript const color1 = Color.fromRGB(255, 0, 0); console.log(color1.toHEX()); // 输出 #ff0000 const color2 = Color.fromHex("#00ff00"); console.log(color2.toRGBA()); // 输出 rgba(0, 255, 0, 1) const color3 = color2.fade(0.5); console.log(color3.toRGBA()); // 输出 rgba(0, 255, 0, 0.5) const color4 = color1.lighten(0.5); console.log(color4.toHEX()); // 输出 #ff8080 ``` ### 扩展功能 - **颜色混合**:可以通过线性插值实现颜色之间的混合。 - **颜色对比度计算**:实现计算两种颜色之间的对比度方法,用于可访问性检查。 - **HSL 转换**:添加从 HSL 创建颜色的方法,并支持将 RGB 转换为 HSL。 通过上述封装方式,可以更高效地管理颜色值,并提供一致的接口用于颜色处理。这种封装方式适用于 UI 框架、图形库或需要处理颜色逻辑的应用场景[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值