RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(下)

简介: RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(下)

RGB颜色和16进制颜色转换太麻烦,使用SwiftUI搭建一个颜色值转换App(下)


逻辑分析

下面我们继续完成App的逻辑部分,当我们输入RGB值的时候,上面的色卡对应背景颜色需要变成我们输入设置的颜色,并且中间的文字也需要展示对应的16进制颜色值

String转Color

首先我们要弄清楚一件事情,我们的TextField输入框只能绑定String类型,而我们的RGB颜色输入的颜色值需要为Double类型,因此我们需要有一个转化的方法。示例:

// 颜色转换方法
func toRGB(red: String, green: String, blue: String) -> Color {
    let r = Double(red) ?? 51
    let g = Double(green) ?? 51
    let b = Double(blue) ?? 51
    let selectColor = Color(red: r / 255, green: g / 255, blue: b / 255)
    return selectColor
}

上述代码中,我们创建了一个方法toRGB,它接收3个String类型的参数,返回Color颜色类型的参数。

在方法中,我们将接收到的3个String类型的参数,都转换为Double类型,然后声明了一个常量selectColor颜色,将转换好的r、g、b当作参数传入颜色。

最后我们return返回这个颜色selectColor

完成好后,我们就可以将这个方法加到色卡视图中,示例:

// 色卡展示
func colorCard() -> some View {
    Text(colorName)
        //隐藏了一些修饰符
        .background(toRGB(red: redColor, green: greenColor, blue: blueColor))
}

image.png

这样,当我们在输入框中输入RGB颜色值时,色卡背景颜色就会对应变成我们设置的颜色。

颜色值转换

最后,我们还要完成将输入的RGB颜色值转换为Hex16进制颜色值。

我们可以创建一个方法来实现它,示例:

extension Color {
    var uiColor: UIColor { .init(self) }
    typealias RGBA = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
    var rgba: RGBA? {
        var (r, g, b, a): RGBA = (0, 0, 0, 0)
        return uiColor.getRed(&r, green: &g, blue: &b, alpha: &a) ? (r, g, b, a) : nil
    }
    var RGBToHex: String? {
        guard let rgba = rgba else { return nil }
        return String(format: "#%02X%02X%02X",
                      Int(rgba.red * 255),
                      Int(rgba.green * 255),
                      Int(rgba.blue * 255))
    }
}
上述代码中,我们对Color颜色进行了extension拓展。

我们使用UIColor方法,将颜色中的r、g、b提取出来转换为String类型,而且rgb颜色值单独转换为16进制,最终返回一个String类型的参数。

我们在输入框视图中,当输入内容改变时调用这个方法,示例:

// RGB 输入值
func rgbInput() -> some View {
    HStack {
        TextField("red", text: $redColor)
            //隐藏了一些代码块
            .onChange(of: redColor) { _ in
                colorName = toRGB(red: redColor, green: greenColor, blue: blueColor).RGBToHex ?? "颜色解析错误"
            }
        TextField("green", text: $greenColor)
            //隐藏了一些代码块
            .onChange(of: greenColor) { _ in
                colorName = toRGB(red: redColor, green: greenColor, blue: blueColor).RGBToHex ?? "颜色解析错误"
            }
        TextField("blue", text: $blueColor)
            //隐藏了一些代码块
            .onChange(of: blueColor) { _ in
                colorName = toRGB(red: redColor, green: greenColor, blue: blueColor).RGBToHex ?? "颜色解析错误"
            }
    }
}

上述代码中,当我们输入的颜色值改变时,我们就将Color颜色值调用toRGB方法转换为String类型,并且赋值给colorName颜色值名称。

自此,我们整个项目的逻辑部分就已经全部完成。

项目预览

恭喜你,完成了整个项目的全部内容!

快来动手试试吧。

相关文章
|
9月前
|
算法 安全 程序员
关于死锁你了解多少,通过“让APP随手机壳改变颜色,程序员和产品经理大家”这一事,了解下死锁可好?
关于死锁你了解多少,通过“让APP随手机壳改变颜色,程序员和产品经理大家”这一事,了解下死锁可好?
91 1
|
iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(3)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
186 0
|
前端开发 数据处理 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
106 0
|
iOS开发 Kotlin 容器
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
149 0
|
存储 缓存 前端开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
150 0
|
前端开发 Swift iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
246 0
|
存储 PHP Swift
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
187 0
|
前端开发 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
187 0
|
iOS开发 开发者 容器
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)
160 0
|
iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)
156 0

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 4
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 5
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 7
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 8
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 9
    阿里云APP备案流程图以及备案所需材料整理,跟着教程一步步操作
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 4
    【Azure Function】Function App门户上的Test/Run返回错误:Failed to fetch
    31
  • 5
    陪玩APP推送配置:陪玩系统手机锁屏收不到推送?可能是这些原因!解决方案来了!
    34
  • 6
    小游戏源码开发之可跨app软件对接是如何设计和开发的
    33
  • 7
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
    135
  • 8
    PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
    60
  • 9
    语音app系统软件源码开发搭建新手启蒙篇
    44
  • 10
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
    884