Commit 5caacf8acf22e16f698f7d1311dfb6e35e7f1682
1 parent
8e77cf68
提交Extensions文件夹
Showing
2 changed files
with
165 additions
and
32 deletions
metaCode.xcodeproj/project.pbxproj
| ... | ... | @@ -9,14 +9,14 @@ |
| 9 | 9 | /* Begin PBXBuildFile section */ |
| 10 | 10 | 0D39E93D7229931C86EB1161 /* Pods_metaCode_metaCodeUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D879B49B1E42F1584DD75E /* Pods_metaCode_metaCodeUITests.framework */; }; |
| 11 | 11 | 1DD2808DF02C120276F99F4D /* Pods_metaCode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1C55A719CFEE073C06D37CE /* Pods_metaCode.framework */; }; |
| 12 | + 790D01822A2D88FC00C5978D /* CNLiveConfigMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */; }; | |
| 13 | + 790D01852A2D89E100C5978D /* CNHexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01842A2D89E100C5978D /* CNHexColor.swift */; }; | |
| 12 | 14 | 796398932A260C0100D045EB /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988C2A260C0100D045EB /* ViewController.swift */; }; |
| 13 | 15 | 796398942A260C0100D045EB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988D2A260C0100D045EB /* AppDelegate.swift */; }; |
| 14 | 16 | 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */; }; |
| 15 | - 79A68C4A2A26E6CE00DC3B43 /* Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A68C492A26E6CE00DC3B43 /* Network.swift */; }; | |
| 16 | - 79A68C4C2A26EA6000DC3B43 /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A68C4B2A26EA6000DC3B43 /* API.swift */; }; | |
| 17 | - 7CD675202A26F805008354C1 /* CNLiveConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD6751F2A26F805008354C1 /* CNLiveConfig.swift */; }; | |
| 17 | + 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; }; | |
| 18 | + 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; }; | |
| 18 | 19 | 7CD675292A270F6A008354C1 /* WJColorChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD675282A270F6A008354C1 /* WJColorChange.m */; }; |
| 19 | - 7CD6752E2A271FE6008354C1 /* CNHexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD6752D2A271FE6008354C1 /* CNHexColor.swift */; }; | |
| 20 | 20 | 7CD6753C2A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD675372A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift */; }; |
| 21 | 21 | 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD675382A2740B0008354C1 /* CNMainView.swift */; }; |
| 22 | 22 | 7CD6753E2A2740B0008354C1 /* CNPayMoneyCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD675392A2740B0008354C1 /* CNPayMoneyCodeView.swift */; }; |
| ... | ... | @@ -60,15 +60,15 @@ |
| 60 | 60 | 63D879B49B1E42F1584DD75E /* Pods_metaCode_metaCodeUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_metaCode_metaCodeUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 61 | 61 | 67F8190701D1AB7F7724E8BA /* Pods-metaCodeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-metaCodeTests.release.xcconfig"; path = "Target Support Files/Pods-metaCodeTests/Pods-metaCodeTests.release.xcconfig"; sourceTree = "<group>"; }; |
| 62 | 62 | 721865F548C997EFAE525B6F /* Pods-metaCode-metaCodeUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-metaCode-metaCodeUITests.release.xcconfig"; path = "Target Support Files/Pods-metaCode-metaCodeUITests/Pods-metaCode-metaCodeUITests.release.xcconfig"; sourceTree = "<group>"; }; |
| 63 | + 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveConfigMacro.swift; sourceTree = "<group>"; }; | |
| 64 | + 790D01842A2D89E100C5978D /* CNHexColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNHexColor.swift; sourceTree = "<group>"; }; | |
| 63 | 65 | 7963988C2A260C0100D045EB /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; }; |
| 64 | 66 | 7963988D2A260C0100D045EB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; |
| 65 | 67 | 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveBaseViewController.swift; sourceTree = "<group>"; }; |
| 66 | 68 | 79A68C512A26F59C00DC3B43 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = metaCode/Info.plist; sourceTree = "<group>"; }; |
| 67 | - 7CD6751F2A26F805008354C1 /* CNLiveConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CNLiveConfig.swift; path = ../../../../Documents/CNLiveConfig.swift; sourceTree = "<group>"; }; | |
| 68 | 69 | 7CD675262A270F69008354C1 /* metaCode-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "metaCode-Bridging-Header.h"; sourceTree = "<group>"; }; |
| 69 | 70 | 7CD675272A270F6A008354C1 /* WJColorChange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WJColorChange.h; sourceTree = "<group>"; }; |
| 70 | 71 | 7CD675282A270F6A008354C1 /* WJColorChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WJColorChange.m; sourceTree = "<group>"; }; |
| 71 | - 7CD6752D2A271FE6008354C1 /* CNHexColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CNHexColor.swift; path = ../../../../CNLiveDigitalRMBHomeDeom/CNLiveDigitalRMBHomeDeom/Classes/NewPagedFlowView/CNHexColor.swift; sourceTree = "<group>"; }; | |
| 72 | 72 | 7CD675372A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNBottomPayMoneyRemindView.swift; sourceTree = "<group>"; }; |
| 73 | 73 | 7CD675382A2740B0008354C1 /* CNMainView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNMainView.swift; sourceTree = "<group>"; }; |
| 74 | 74 | 7CD675392A2740B0008354C1 /* CNPayMoneyCodeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNPayMoneyCodeView.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -136,11 +136,19 @@ |
| 136 | 136 | path = Pods; |
| 137 | 137 | sourceTree = "<group>"; |
| 138 | 138 | }; |
| 139 | + 790D01832A2D89E100C5978D /* Extensions */ = { | |
| 140 | + isa = PBXGroup; | |
| 141 | + children = ( | |
| 142 | + 790D01842A2D89E100C5978D /* CNHexColor.swift */, | |
| 143 | + ); | |
| 144 | + path = Extensions; | |
| 145 | + sourceTree = "<group>"; | |
| 146 | + }; | |
| 139 | 147 | 7963988A2A260B3300D045EB /* Classes */ = { |
| 140 | 148 | isa = PBXGroup; |
| 141 | 149 | children = ( |
| 150 | + 790D01832A2D89E100C5978D /* Extensions */, | |
| 142 | 151 | 7CD675502A29C036008354C1 /* Constant */, |
| 143 | - 7CD6752C2A271FB1008354C1 /* Extensions */, | |
| 144 | 152 | 796398912A260C0100D045EB /* Common */, |
| 145 | 153 | 796398922A260C0100D045EB /* Config */, |
| 146 | 154 | 796398902A260C0100D045EB /* Main */, |
| ... | ... | @@ -200,8 +208,7 @@ |
| 200 | 208 | 796398922A260C0100D045EB /* Config */ = { |
| 201 | 209 | isa = PBXGroup; |
| 202 | 210 | children = ( |
| 203 | - | |
| 204 | - 7CD6751F2A26F805008354C1 /* CNLiveConfig.swift */, | |
| 211 | + 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */, | |
| 205 | 212 | ); |
| 206 | 213 | path = Config; |
| 207 | 214 | sourceTree = "<group>"; |
| ... | ... | @@ -224,16 +231,6 @@ |
| 224 | 231 | path = Base; |
| 225 | 232 | sourceTree = "<group>"; |
| 226 | 233 | }; |
| 227 | - | |
| 228 | - 7963989E2A260E7600D045EB /* Network */ = { | |
| 229 | - isa = PBXGroup; | |
| 230 | - children = ( | |
| 231 | - 79A68C492A26E6CE00DC3B43 /* Network.swift */, | |
| 232 | - 79A68C4B2A26EA6000DC3B43 /* API.swift */, | |
| 233 | - ); | |
| 234 | - path = Network; | |
| 235 | - sourceTree = "<group>"; | |
| 236 | - }; | |
| 237 | 234 | 7CD675212A26F844008354C1 /* HomePage */ = { |
| 238 | 235 | isa = PBXGroup; |
| 239 | 236 | children = ( |
| ... | ... | @@ -257,15 +254,6 @@ |
| 257 | 254 | path = HomePage/View; |
| 258 | 255 | sourceTree = "<group>"; |
| 259 | 256 | }; |
| 260 | - 7CD6752C2A271FB1008354C1 /* Extensions */ = { | |
| 261 | - isa = PBXGroup; | |
| 262 | - children = ( | |
| 263 | - 7CD6752D2A271FE6008354C1 /* CNHexColor.swift */, | |
| 264 | - ); | |
| 265 | - name = Extensions; | |
| 266 | - path = Common; | |
| 267 | - sourceTree = "<group>"; | |
| 268 | - }; | |
| 269 | 257 | 7CD6754D2A2840B9008354C1 /* Controller */ = { |
| 270 | 258 | isa = PBXGroup; |
| 271 | 259 | children = ( |
| ... | ... | @@ -585,7 +573,7 @@ |
| 585 | 573 | 7CD675292A270F6A008354C1 /* WJColorChange.m in Sources */, |
| 586 | 574 | 796398942A260C0100D045EB /* AppDelegate.swift in Sources */, |
| 587 | 575 | 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */, |
| 588 | - 7CD6752E2A271FE6008354C1 /* CNHexColor.swift in Sources */, | |
| 576 | + 790D01822A2D88FC00C5978D /* CNLiveConfigMacro.swift in Sources */, | |
| 589 | 577 | 7CD675482A274167008354C1 /* PGIndexBannerSubiew.m in Sources */, |
| 590 | 578 | 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */, |
| 591 | 579 | 7CD675522A29C04B008354C1 /* CNLiveConstant.swift in Sources */, |
| ... | ... | @@ -593,13 +581,13 @@ |
| 593 | 581 | 7CD675402A2740B0008354C1 /* CNCollectMoneyCodeView.swift in Sources */, |
| 594 | 582 | 7CD6754F2A2840B9008354C1 /* CNMetaCodeHomePageController.swift in Sources */, |
| 595 | 583 | 7CD675472A274167008354C1 /* NewPagedFlowView.m in Sources */, |
| 596 | - 79A68C4A2A26E6CE00DC3B43 /* Network.swift in Sources */, | |
| 584 | + 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */, | |
| 585 | + 790D01852A2D89E100C5978D /* CNHexColor.swift in Sources */, | |
| 597 | 586 | 796398932A260C0100D045EB /* ViewController.swift in Sources */, |
| 598 | 587 | 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, |
| 599 | 588 | 7CD6753F2A2740B0008354C1 /* CNTopCollectMoneyRemindView.swift in Sources */, |
| 600 | 589 | 7CD6753C2A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift in Sources */, |
| 601 | - 7CD675202A26F805008354C1 /* CNLiveConfig.swift in Sources */, | |
| 602 | - 79A68C4C2A26EA6000DC3B43 /* API.swift in Sources */, | |
| 590 | + 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */, | |
| 603 | 591 | ); |
| 604 | 592 | runOnlyForDeploymentPostprocessing = 0; |
| 605 | 593 | }; | ... | ... |
metaCode/Classes/Extensions/CNHexColor.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNHexColor.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by daojian on 2023/5/31. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +#if os(iOS) || os(watchOS) || os(tvOS) | |
| 11 | + import UIKit | |
| 12 | + public typealias HexColor = UIColor | |
| 13 | +#else | |
| 14 | + import Cocoa | |
| 15 | + public typealias HexColor = NSColor | |
| 16 | +#endif | |
| 17 | + | |
| 18 | + | |
| 19 | +public extension HexColor { | |
| 20 | + typealias Hex = String | |
| 21 | + | |
| 22 | + convenience init?(_ hex: Hex, alpha: CGFloat? = nil) { | |
| 23 | + | |
| 24 | + guard let hexType = Type(from: hex), let components = hexType.components() else { | |
| 25 | + return nil | |
| 26 | + } | |
| 27 | + | |
| 28 | + #if os(iOS) || os(watchOS) || os(tvOS) | |
| 29 | + self.init(red: components.red, green: components.green, blue: components.blue, alpha: alpha ?? components.alpha) | |
| 30 | + #else | |
| 31 | + self.init(calibratedRed: components.red, green: components.green, blue: components.blue, alpha: alpha ?? components.alpha) | |
| 32 | + #endif | |
| 33 | + } | |
| 34 | + | |
| 35 | + /// The string hex value representation of the current color | |
| 36 | + var hex: Hex { | |
| 37 | + var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0, rgb: Int | |
| 38 | + getRed(&r, green: &g, blue: &b, alpha: &a) | |
| 39 | + | |
| 40 | + if a == 1 { // no alpha value set, we are returning the short version | |
| 41 | + rgb = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0 | |
| 42 | + return String(format: "#%06x", rgb) | |
| 43 | + } else { | |
| 44 | + rgb = (Int)(r*255)<<24 | (Int)(g*255)<<16 | (Int)(b*255)<<8 | (Int)(a*255)<<0 | |
| 45 | + return String(format: "#%08x", rgb) | |
| 46 | + } | |
| 47 | + } | |
| 48 | + | |
| 49 | + private enum `Type` { | |
| 50 | + | |
| 51 | + case RGBshort(rgb: Hex) | |
| 52 | + case RGBshortAlpha(rgba: Hex) | |
| 53 | + case RGB(rgb: Hex) | |
| 54 | + case RGBA(rgba: Hex) | |
| 55 | + | |
| 56 | + init?(from hex: Hex) { | |
| 57 | + | |
| 58 | + var hexString = hex | |
| 59 | + hexString.removeHashIfNecessary() | |
| 60 | + | |
| 61 | + guard let t = Type.transform(hex: hexString) else { | |
| 62 | + return nil | |
| 63 | + } | |
| 64 | + | |
| 65 | + self = t | |
| 66 | + } | |
| 67 | + | |
| 68 | + static func transform(hex string: Hex) -> Type? { | |
| 69 | + switch string.count { | |
| 70 | + case 3: | |
| 71 | + return .RGBshort(rgb: string) | |
| 72 | + case 4: | |
| 73 | + return .RGBshortAlpha(rgba: string) | |
| 74 | + case 6: | |
| 75 | + return .RGB(rgb: string) | |
| 76 | + case 8: | |
| 77 | + return .RGBA(rgba: string) | |
| 78 | + default: | |
| 79 | + return nil | |
| 80 | + } | |
| 81 | + } | |
| 82 | + | |
| 83 | + var value: Hex { | |
| 84 | + switch self { | |
| 85 | + case .RGBshort(let rgb): | |
| 86 | + return rgb | |
| 87 | + case .RGBshortAlpha(let rgba): | |
| 88 | + return rgba | |
| 89 | + case .RGB(let rgb): | |
| 90 | + return rgb | |
| 91 | + case .RGBA(let rgba): | |
| 92 | + return rgba | |
| 93 | + } | |
| 94 | + } | |
| 95 | + | |
| 96 | + typealias rgbComponents = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) | |
| 97 | + func components() -> rgbComponents? { | |
| 98 | + | |
| 99 | + var hexValue: UInt32 = 0 | |
| 100 | + guard Scanner(string: value).scanHexInt32(&hexValue) else { | |
| 101 | + return nil | |
| 102 | + } | |
| 103 | + | |
| 104 | + let r, g, b, a, divisor: CGFloat | |
| 105 | + | |
| 106 | + switch self { | |
| 107 | + case .RGBshort(_): | |
| 108 | + divisor = 15 | |
| 109 | + r = CGFloat((hexValue & 0xF00) >> 8) / divisor | |
| 110 | + g = CGFloat((hexValue & 0x0F0) >> 4) / divisor | |
| 111 | + b = CGFloat( hexValue & 0x00F) / divisor | |
| 112 | + a = 1 | |
| 113 | + case .RGBshortAlpha(_): | |
| 114 | + divisor = 15 | |
| 115 | + r = CGFloat((hexValue & 0xF000) >> 12) / divisor | |
| 116 | + g = CGFloat((hexValue & 0x0F00) >> 8) / divisor | |
| 117 | + b = CGFloat((hexValue & 0x00F0) >> 4) / divisor | |
| 118 | + a = CGFloat( hexValue & 0x000F) / divisor | |
| 119 | + case .RGB(_): | |
| 120 | + divisor = 255 | |
| 121 | + r = CGFloat((hexValue & 0xFF0000) >> 16) / divisor | |
| 122 | + g = CGFloat((hexValue & 0x00FF00) >> 8) / divisor | |
| 123 | + b = CGFloat( hexValue & 0x0000FF) / divisor | |
| 124 | + a = 1 | |
| 125 | + case .RGBA(_): | |
| 126 | + divisor = 255 | |
| 127 | + r = CGFloat((hexValue & 0xFF000000) >> 24) / divisor | |
| 128 | + g = CGFloat((hexValue & 0x00FF0000) >> 16) / divisor | |
| 129 | + b = CGFloat((hexValue & 0x0000FF00) >> 8) / divisor | |
| 130 | + a = CGFloat( hexValue & 0x000000FF) / divisor | |
| 131 | + } | |
| 132 | + | |
| 133 | + return (red: r, green: g, blue: b, alpha: a) | |
| 134 | + } | |
| 135 | + } | |
| 136 | +} | |
| 137 | + | |
| 138 | +private extension String { | |
| 139 | + | |
| 140 | + mutating func removeHashIfNecessary() { | |
| 141 | + if hasPrefix("#") { | |
| 142 | + self = replacingOccurrences(of: "#", with: "") | |
| 143 | + } | |
| 144 | + } | |
| 145 | +} | ... | ... |