当前位置: 首页 > news >正文

iOS自定义电池电量显示控件 BatteryView 实现

iOS自定义电池视图:BatteryView

传送门:Android自定义电池电量显示控件 BatteryView 实现

在iOS开发中,自定义视图是提升用户体验的重要手段之一。本文将介绍如何通过Swift语言实现一个自定义的电池视图(BatteryView),并展示其功能和使用方法。


1. 功能概述

BatteryView 是一个用于显示设备电量状态的自定义视图,支持以下功能:

  • 电量颜色动态变化:根据电量百分比自动调整颜色。
  • 充电状态显示:当设备正在充电时,显示闪电图标。
  • 电量百分比显示:可选择是否显示电量百分比。
  • 动画效果:支持电量变化的平滑动画。

2. 核心属性

以下是 BatteryView 的核心属性及其作用:

属性名类型描述
borderColorUIColor电池边框的颜色,默认为黑色。
powerColorUIColor正常电量的颜色,默认为绿色。
lowPowerColorUIColor低电量(<20%)的颜色,默认为红色。
mediumPowerColorUIColor中等电量(20%-50%)的颜色,默认为黄色。
chargingColorUIColor充电状态下的电量颜色,默认为绿色。
lightningColorUIColor充电闪电图标的颜色,默认为白色。
textColorUIColor百分比文字的颜色,默认为黑色。
borderWidthCGFloat电池边框的宽度,默认为4.0。
headWidthCGFloat电池正极的宽度,默认为4.0。
powerInt当前电量百分比,范围为0-100。
isChargingBool是否处于充电状态。
showPercentageBool是否显示电量百分比。

3. 实现细节

3.1 绘制电池主体

电池主体是一个圆角矩形,通过 UIBezierPath 实现:

let batteryBodyRect = CGRect(x: borderWidth / 2,y: borderWidth / 2,width: width - borderWidth * 1.5 - headWidth, // 留出正极位置height: height - borderWidth
)
let batteryBodyPath = UIBezierPath(roundedRect: batteryBodyRect, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: cornerRadius, height: cornerRadius))
batteryBodyPath.lineWidth = borderWidth
batteryBodyPath.stroke()

3.2 绘制电池正极

电池正极位于右侧外部,通过简单的矩形绘制实现:

let batteryHeadRect = CGRect(x: width - borderWidth - headWidth,y: height / 2 - headHeight / 2,width: headWidth,height: headHeight
)let batteryHeadPath = UIBezierPath(rect: batteryHeadRect)
batteryHeadPath.fill()

3.3 绘制电量部分

电量部分根据当前电量百分比动态调整宽度,并使用不同的颜色填充:

let powerPadding = borderWidth * 1.5
let powerWidth = (batteryBodyRect.width - powerPadding * 2) * CGFloat(power) / 100let powerRect = CGRect(x: batteryBodyRect.minX + powerPadding,y: batteryBodyRect.minY + powerPadding,width: powerWidth,height: batteryBodyRect.height - powerPadding * 2
)
let powerPath = UIBezierPath(roundedRect: powerRect, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: cornerRadius / 2, height: cornerRadius / 2))
powerPath.fill()

3.4 充电状态与百分比显示

  • 充电状态:当 isChargingtrue 时,绘制闪电图标。
  • 百分比显示:当 showPercentagetrue 时,显示电量百分比。
if isCharging {drawLightning(in: batteryBodyRect)
} else if showPercentage {drawPercentage(in: batteryBodyRect)

相关文章:

  • uniapp自定义一个选择年月日时分的组件。
  • SpringBoot驾校报名小程序实现
  • 重构数字信任基石:Java 24 网络安全特性的全维度革新与未来防御体系构建
  • List 的介绍 [数据结构 初阶]
  • OceanBase数据库-学习笔记2-C#/C++程序如何访问
  • error mounting 报错解决办法
  • 【Android】dialogX对话框框架
  • 数值分析、数值代数之追赶法
  • 高功率无人机动力方案首选:CKESC ROCK 220A-H CAN 电调工程性能实测
  • AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客户端开源应用程序,集成了 Monaco 编辑器。
  • Web安全:威胁解析与综合防护体系构建
  • vscode vue 的插件点击组件不能跳转到文件问题解决
  • 人工智能——XGBoost 算法
  • 如何启动jar包隐藏cmd窗口
  • k8s生成StarRocks集群模版
  • π0.5:带开放世界泛化的视觉-语言-动作模型
  • 鸿蒙OSS文件(视频/图片)压缩上传组件-能够增删改查
  • Harbor2.0仓库镜像清理策略
  • 考研系列-计算机组成原理第六章、总线
  • Servlet (简单的servlet的hello world程序)
  • 中国海警位中国黄岩岛领海及周边区域执法巡查
  • 看见“看得见的手”,看见住房与土地——读《央地之间》
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 83岁连丽如每周登台说书,还上了15堂连派评书课
  • 言短意长|新能源领军者密集捐赠母校
  • 西湖大学独家回应本科招生走出浙江:经过三年试点,条件成熟