自定义的iOS的滚轮选择器,附带农历选择器实现
来源:互联网 发布:淘宝店被屏蔽了怎么办 编辑:程序博客网 时间:2024/05/17 23:49
本人由论坛会员beanwolf分享
这个控件并不是对iOS自带的UIPickerView贴图,而是重新实现,我一周多的成果,期间走了不少弯路。哈!
此控件开发的原因:
最近公司有个需求,需要做一个农历的日期滚轮选择器,一开始想用iOS自带的UIPickerView,但是设计人员要求的比较高,必须实现她要求的样式,也就是上图中大家看到的样式。但是UIPickerView根本没有提供可以定制样式(也就是更换皮肤)的接口。首先我在论坛上找到了帖子,按照这位兄台所述,确实可以在一定程度上修改UIPickerView的图片,我之所以说一定程度上,有以下几个原因:
(1.)他是用覆盖原有的UIPickerView上的各个子视图上图片的方法做的,那么你提供新的图片就必须与原图片严丝合缝。这也说明,即便是图片换了,样式也是不能换的,譬如:分割线的粗细、上下左右的边框的大小等,也就是不能完全DIY,不能满足我的需求。
(2.)由于覆盖UIPickerView上的各个子视图上图片的做法不是苹果官方给出的,一旦以后某个版本的UIPickerView实现策略改变,例如:3号子视图不再是滚轮的背景图片,你的做法就挂了。
于是我就实现了上图中的滚轮选择器,它与UIPickerView的区别是:
(1.)皮肤图片提供了方法可以做替换的。
(2.)可以选择滚轮上的数据是否循环滚动。
(3.)可以指定选择条的位置。
为了代码的复用,也就是所谓的OOP,我按照以下的方式实现:
(1.)pickerview目录:这个目录中的IDJPickerView.h是滚轮选择器视图,没有任何和与数据相关的东西,也就是你可以在IDJPickerView上显示任何数据。IDJPickerView通过委托获取需要显示的数据。这个目录下的IDJScrollComponent.h实现了UIScrollView上的内容可以反复循环滚动的功能。
(2.)datepicker目录:IDJDatePickerView.h实现了IDJPickerView里的协议,并把IDJPickerView做为自己的一个私有成员,实现了一个可以根据type字段显示公历、农历的日期选择器,IDJDatePickerView.m里的农历算法用的是solar_chinese_calendar目录中的C++算法,因此农历的相关数据类使用了C++混编的代码。其实iOS自己支持农历的,但是存在BUG,具体的原因大家可以看我的IDJChineseCalendar.mm的源码,里面的注释比较详细的。我在这里也使用了一层封装,也就是IDJDatePickerView.m本身也不提供数据,而是通过IDJCalendar.h、IDJChineseCalendar.h、IDJCalendarUtil.h来提供,这样既实现了数据与视图的分离(因为农历算法太复杂了,直接写在IDJDatePickerView.m里会使得代码看起来可读性太差了),而且把C++的调用封装在了数据层,使得IDJDatePickerView.m的视图层代码不会出现C++的API。
(3.)timepicker目录:这个目录纯粹是一个Demo,展示了一个不循环滚动、显示行数与选中条位置不对称的选择器,没有什么实际的含义。
一开始我是纯粹写农历的选择器,代码都是耦合在一起的,后来逐个拆开的,这样代码就可以复用了,不仅仅是农历选择器,而是可以承载任何数据。
原文链接:http://www.cocoachina.com/bbs/read.php?tid=85374
源码:
- 自定义的iOS的滚轮选择器,附带农历选择器实现
- 自定义的iOS的滚轮选择器,附带农历选择器实现
- 自定义的iOS的滚轮选择器,附带农历选择器实现
- 自定义的iOS的滚轮选择器,附带农历选择器实现代码
- 仿IOS特效(一)——Android 自定义View实现3D滚轮效果的城市联动选择器
- 自定义滚轮选择器Wheelview
- 滚轮样式的性别选择器
- 自定义滚轮效果选择器spinnerwheel的使用总结
- Android滚轮选择器实现
- RecyclerView 实现滚轮选择器
- ios - 农历公历互转 农历选择器
- 省市区三级联动城市选择器(仿iOS滚轮实现)
- 【Android】ColorPickerDialog 自定义颜色选择器的实现
- 自定义PickerView实现滚动选择器的效果
- Android 实现自定义的WheelView选择器
- 仿iOS滚轮选择器,目前最流畅,最好用,最接近iOS原生的开源控件
- iOS中添加图片选择器的实现
- IOS选择器的使用
- 开源.net程序反编译工具 - ILSpy
- 使用服务器变量过滤XSLT Webpart数据
- MFC 消息处理顺序
- 石家庄铁道学院ARCGIS培训
- 个人安卓学习笔记---第一个Android应用程序
- 自定义的iOS的滚轮选择器,附带农历选择器实现
- jquery验证时间
- ...
- 大家看看这个php+mysql留言板哪里有错误?不同的地方下载几次同样的了,这么大留言板设计出来,还有小问题!败在细节。
- 记录包执行的日志 转
- 体验DWR
- ECLIPSE 三大GUI插件
- Linux学习过程
- The virtual machine 'xxx' has terminated unexpectedly during startup with