老司机工作中用到的自定义控件,总有一个适合你的(二)

本文介绍了一个强大的 iOS UITextView 扩展,具备 placeholder 属性、自动调整高度及图片插入功能;一种自动计算年龄与星座的 DatePicker 实现方法;一款带有文字渐变闪烁效果的标签组件;以及一行代码绘制表格的 UIView 分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时隔半个月,终于来更新第二篇了,大家有木有很期待!


一、一个强大的UITextView分类,让系统TextView自带placeholder属性、自动高度、支持输入图片三大功能
1、效果:

功能一、让系统TextView自带placeholder属性

textview9c98786a8816

image

功能二、自动改变高度,类似聊天输入框

11textviewheightchange

image

功能三、支持输入图片

image
2、使用方法:

将UITextView+WZB.h和UITextView+WZB.m拖入工程

只需要在需要使用的地方直接导入头文件UITextView+WZB.h,你的UITextView就拥有了这三大功能

13textview-demo-1

image

如果想要计算高度,只需要调用这个方法即可,你需要在block回调里手动更改textView的高度

如图

14textviewheightchange

image

插入图片的方法如下:

注释写的很清楚,效果如下:

image
3、实现大致原理:

使用runtime为textView添加如下属性

监听

当文字发生变化的时候

添加图片是用的NSTextAttachment

4、GitHub源码地址:UITextView-WZB

二、一句话实现一个可以自动计算年龄和星座的DatePicker
1、效果:

169c98786a88160

普通显示在界面上

179c98786a88161

从屏幕下边弹出

189c98786a88162

做键盘显示
2、使用方法:

将WZBDatePicker.h和WZBDatePicker.m拖入工程

只需要在需要使用的地方直接导入头文件WZBDatePicker.h,然后调用下边这个方法即可

h文件中提供了这些方法和属性,注释写的很清楚,可以直接使用。

如果做键盘显示,需要这样:

注意,参数view,必须传带有inputView的控件,比如UITextField或UITextView等

3、实现大致原理:

里边是一个tableView,tableView的headerView是一个label,显示信息。tableView的footerView是个UIDatePicker,显示日期。这样写是因为比较好控制中间两行cell的显示与隐藏,headerView和footerView也不用单独管理size

监听picker的滚动,并刷新tableView或者调用block更新时间,如果是键盘,隐藏了中间两行cell,所以不需要刷新tableView

如果enableDarkMask为yes,背景颜色变成半透明颜色,并且启用单击手势

4、GitHub源码地址:WZBDatePicker

三、一句话实现一个带有文字闪动渐变的标签
1、效果:

19wzbgraduallabels

带有文字闪动渐变的label
2、使用方法:

将WZBGradualLabel.h和WZBGradualLabel.m拖入工程

只需要在需要使用的地方直接导入头文件WZBGradualLabel.h,然后调用下边这个方法即可

20wzbgraduallabel

效果

下边是提供的一些属性和方法

h文件中提供了这些方法和属性,注释写的很清楚,所有方法可以直接使用。colors是个数组,可以设置渐变层的颜色,至少传入两个值

3、实现大致原理:

219c98786a88161

原理分析

其实看到层级图,它是有三层的,最底层的label就是你要显示的label,中间有层红色的部分,这个其实是渐变层view(截图没截好),最上层的label是渐变层的文字

这句话是设置渐变图层的mask为label图层,这样就可以用文字裁剪渐变图层了,只保留文字的部分

至于动画改变,我用的是一个UIView动画,动态改变中间层View和渐变层label的x值,view是添加在底层label上的,上层label是添加在中间view上的,先让view在父控件的最左边,上层label在此view的右边,说白了就是让上层label和底层label完全重合,为了维持这一状态,中间的view向右走,上层label必须以同样的值向左走!具体请看代码:

kvo监听这些属性,也是为了维持上层label和底层label能完全重合的状态,以便支持用户对label进行文字对其、文字改变、文字换行、字体大小、frame、换行以及attributedText等操作

4、GitHub源码地址:WZBGradualLabel

四、一行代码画一个表格,UIView的分类,可以很简单的画擅长表格
1、效果:

很多app用到了这种html元素效果,写了个demo
效果如下:

229c98786a88161

image
2、使用方法:

只需要一行代码 ,可以自定义文字颜色、背景颜色、合并单元格、点击事件等操作

.h文件中提供了这些方法,用法看注释即可,getLabelWithIndex:方法是得到第index个格子,比如你有10个格子,[view getLabelWithIndex:0];是得到第一个格子,可以对其进行任何操作,比如我在第三个表格中拿到右边三个label,添加单击手势进行跳转

3、实现大致原理:

这是核心代码,其中做了合并单元格、文字颜色、背景颜色、等判断。画线是用的贝塞尔曲线和CAShapeLayer,代码在下边,每个单元格里都创建了label显示文字。我还提供了方法画一条直线,相信项目中很多页面某些位置需要画一条直线, - (void)wzb_drawLineWithFrame:(CGRect)frame lineType:(WZBLineType)lineType color:(UIColor *)color lineWidth:(CGFloat)lineWidth这个方法能够很方便的实现这一需求

下边画了一下随机颜色的线条,最终效果是这样:

239c98786a88160

image
4、GitHub源码地址:UIView-WZB
### 荣耀 MagicBook Pro 配置与性能 #### 处理器与图形处理能力 荣耀 MagicBook Pro 提供了强大的计算能力和出色的图形处理表现。其搭载英特尔 i5 或 i7 处理器,能够满足日常办公、游戏娱乐以及视频编辑等多种需求[^4]。此外,在显卡方面,虽然未提及独立显卡型号,但从整体性能来看,该设备足以应对主流的游戏和图像处理任务。 #### 存储与内存 在存储方案上,标准版本配备 512GB 的 PCIe 固态硬盘,提供高速的数据读写速度,适合大多数用户的文件管理和软件安装需求。然而,对于需要更大容量存储空间的用户而言,可以通过自行更换硬盘来扩展至更高规格,例如升级到 1TB SSD 是可行的选择[^3]。与此同时,机器内置 8GB 双通道 DDR4 内存,默认频率为 2400MHz,确保多任务运行流畅无阻。 #### 屏幕显示效果 作为一款主打全面屏概念的产品,荣耀 MagicBook Pro 搭载了一块 16.1 英寸的大尺寸显示屏,具备较高的分辨率和支持广视角技术,带来沉浸式的视觉享受。这种设计不仅提升了观看体验,还使得长时间工作下的眼睛疲劳感有所缓解。 #### 特色功能——Magic-link 2.0 值得一提的是,新款机型引入了增强型互联解决方案即 Magic-link 2.0 魔法互传特性。这项创新允许用户轻松实现手机同电脑间资料(如照片、文档等)的一键式无线传输操作,极大地方便了跨平台协作场景中的效率提升[^2]。 ```python # 示例代码展示如何查询硬件基本信息 (Python) import platform def get_system_info(): system = platform.system() processor = platform.processor() architecture = platform.architecture()[0] return f"System Info:\nOS:{system}\nProcessor:{processor}\nArchitecture:{architecture}" print(get_system_info()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值