简单易用"里程碑"、"时间轴"<iOS小组件>

非常感谢,帮助我的朋友们,谢谢你们。上次我的好朋友指出了我编码上(jwTextFiled工具组件)存在一些不规范问题,这次注意提高。

呆毛地址:https://github.com/NIUXINGJIAN/MilestonesAndTimeline.git

【创做背景】组件的制作是因为用到类似的功能,UI设计的图片不能满足实际场景需要。这个组件可能存在一些我没有发现的bug,如果你发现了,希望批评指正。
【首先声明】该组件是本人原创,请珍惜劳动成果。因为创造它的灵感只有一瞬间,但是完成它却使用了6个多小时,而自己测试优化基本上花了8个小时。

1、 它能够帮助你做什么?

a、组件基本说明:
【组件内部都有啥?说明:组件的box个数不确定,box内部的items个数不确定,item<为lab>的高度不确定,box要包裹住一个box内的所有items,最后一个box后可能有附加数据addtions,附加数据条数不确定,任何一条附加数据文字长度不确定 ===> 没关系,组件已经统统帮你做好了】;
【如何修改它:你可以在 jw_ASV_Macro.h 文件里去修改与相关布局参数,进而改变组件的布局配置】
b、你只需要传入一个包裹有若干数据模型的数组,数据模型中就是可能要显示的字段,这样很好的支持了该组件自己根据一个模型去判断要在一个Box里加载多少条数据。而数组的个数就是Box的条数。支持附加数据,附加数据也做了自适应排版与组件自适应,附加数据可以有若干条。【注意:如果你要实现自动根据数据模型去加载box内的items,你需要参照我的demo里的设计实现,你可能要把 jwAutoStepModel.h 与 jwAutoStepView.m 里相关模型部分做一些调整】
c、支持使用该组件的app在及时更新(刷新)数据的时候,组件及时更新,对内存做了优化,避免无用数据占据内存,能够根据数据模型,自己计算出在父视图中的高度,方便更新父视图的布局改变。
d、做一些自定义的修改,来定制它的布局,你只需要看懂一个宏文件 jw_ASV_Macro.h 即可。下面是宏文件,够简单吧

#pragma mark————————> (jwAutoStepView)方法宏定义

#define K_Cap_X  25 // 帽子x
#define K_Cap_Y  30 // 帽子y (默认)
#define K_Cap_W  25 // 帽子宽度
#define K_Cap_H  K_Cap_W // 帽子高度

#define K_Cap_B_B_Scale 0.1 // 帽子与帽杆的比例
#define K_LAB_LINE_DESTENCE  3 // 如果Lab大于1行的行间距

#define K_MOUTH_W_MARGIN 10 // 嘴角的宽度
#define K_MOUTH_H_MARGIN K_MOUTH_W_MARGIN *0.6 // 嘴角的高度
#define K_P_2_X  (FIRST_P_X + K_MOUTH_W_MARGIN)// 绘制第二个点的X值
#define BOX_RIGHT_MARGIN  25//边框距离最右边的距离

#define K_Line_H ((K_Cap_W)*1.40f) // 默认的帽子下面杆子高度

#define K_Cap_Box_Margin 8 // 帽子与Box间距

#define JW_A_S_MAINS_WIDTH [[UIScreen mainScreen] bounds].size.width//屏幕宽

// 第一个点的起始位置
#define FIRST_P_X  ((K_Cap_X)+(K_Cap_W)+(K_Cap_Box_Margin))
#define BOX_WIDTH  (JW_A_S_MAINS_WIDTH-K_Cap_X-K_Cap_W-K_Cap_Box_Margin-BOX_RIGHT_MARGIN) // 虚线框的宽度

// box 与 lab 与 lab 间距
#define K_inBOX_M_LAB_H  10.0f  // box 与 Lab 水平 左右 间距
#define K_BOX_M_LAB_V  10.0f  // box 内 Lab 与 Lab 竖直 间距
#define K_BOX_LR_LAB_SIZE  CGSizeMake(inK_BOX_M_LAB_H, inK_BOX_M_LAB_H)// box 与 Lab 水平 左右 间距

#define K_L_H   21 // 一个Lab 的默认高度

#define K_CONAIN_TOP  100  // 组件页眉距离
#define K_CONAIN_BOTTOM  100  // 组件页脚距离

#define K_BOX_M_BOX_V  20 // 线框间距离 (默认)

#define K_LASTBOX_M_ADDLAB_V  50 // 最后一个box 与首个附加Lab 的竖直距离
#define K_ADDLAB_M_ADDLAB_V  15 // 附加Lab与附加Lab之间的竖直距离

#define K_ADDLAB_M_CONTAIN_L  20 // 附加Lab与组件左边的水平距离
#define K_ADDLAB_M_CONTAIN_R  20 // 附加Lab与组件右边的水平距离

??是我写的简单的几个方法,还能写几个,但是我看也没有必要了,又不是什么牛逼的组件,??

#pragma mark———————— 重要方法

/*传入页面数据  (data 为 内容条数不固定)<??>*/
- (void)set_asv_uiData:(NSMutableArray<jwAutoStepModel*>*)data;

/*传入页面数据 (data 为 附加内容条数不固定)<??>*/
- (void)set_asv_addData:(NSMutableArray*)data;

/*返回组件 高度 <??>*/
- (CGFloat)get_asv_ControlHeight;

/*默认设置 <??你可以省去“次要方法”配置,直接在该方法内去配置??>*/
-(void)set_asv_default;

#pragma mark———————— 次要方法

/*正在进行step的 帽子 颜色,反之颜色 <??>*/
- (void)set_asv_capColor_steping:(UIColor*)c1 oppose:(UIColor*)c2 cap:(UIColor*)c3;

/*正在进行step的 帽杆 颜色,反之颜色 <??>*/
- (void)set_asv_capBarColor_setping:(UIColor*)c1 oppose:(UIColor*)c2 cap:(UIColor*)c3;

/*box 内文字的颜色 <??>*/
- (void)set_asv_boxTextColor_steping:(UIColor*)c1 oppose:(UIColor*)c2;

/*box 边框的颜色 <??>*/
- (void)set_asv_boxBorderColor_stepingColor:(UIColor*)c1 oppose:(UIColor*)c2;

/* cap 内文字的颜色 <??>*/
- (void)set_asv_capTextColor_steping:(UIColor*)c1 oppose:(UIColor*)c2;

/*帽子文字(默认为 [1期...]有缺失校验)<??> */
- (void)set_asv_CapTitles:(NSArray*)tAry;

/*帽子距离最左边距离(def=25) <??>*/
- (void)set_asv_CapLeft:(CGFloat)l_m;

/*帽子的直径(def=25) <??>*/
- (void)set_asv_CapDiameter:(CGFloat)d;

/*帽杆与帽子的比例(0.01f ~ 1.0f ; def=0.1)<??> */
- (void)set_asv_CapRodScale:(CGFloat)crScale;

/*box距离页面最右边的距离(def = 25)<??>*/
- (void)set_asv_BoxRight:(CGFloat)r_m;

/* box 与 Lab 水平左右 间距(def = CGSize(10,10))<??>*/
- (void)set_asv_BoxMarginLab_L_R:(CGSize)bllrSize;

#pragma mark-———————— <??>如要实现,必须在 添加数据之前调用,不然不能实现<??>
/* box 内 Lab 与 Lab 竖直 间距(def = 10)<??>*/
/* ?? box 内 首个 Lab 与 box 顶部间距由 宏定义,这里不再提供方法修改*/
- (void)set_asv_inBox_LabMarginLab_V:(CGFloat)llmv;

2、 你如何使用它?

进入参照我写的demo,demo是基于 storyBoard 的;
demo说明:点击页面模拟刷新功能,及时更新组件、数据。
demo里进行了数据的模拟,我比较钟爱于StoryBoard 编程,开发的时候,就是一人一个storyBoard ,并没有将所有的sb全放在一个控制面板里,纯代码的demo、还有基于 Masory 的demo我没有制作,见谅了。
如果你爱好纯代码,或者Masory 可以修改一下代码,虽然没有试过,应该可以的吧。

下面放两张截图:
数据以模拟的样子实现的:
(1)、运行demo,可能是下面的样子:

(2)点击页面(模拟数据刷新),可能是下面的样子:

(3)、滚动页面可以看到附加数据

(4)、再次刷新数据,附加数据,也可以随机赋值,但是我的demo里是写死的,你可以试一试,??

3、结束语

虽然方法有点low,但是实现了基本的功能,锻炼了思维,还能提供给有需要帮助的人,觉得挺好的。
你也可以参照我的简书说明进行使用,希望能够帮到你。

4、资源链接

https://github.com/NIUXINGJIAN/MilestonesAndTimeline.git
如果给你带来帮助了,记得star一下哦??!

时间: 2024-10-23 00:13:15

简单易用"里程碑"、"时间轴"<iOS小组件>的相关文章

自适应文案提示框、无数据图片加载&lt;IOS小组件&gt;

非常感谢,帮助我的朋友们,谢谢你们. 该组件的编写仅仅用来不到4个小时,包括测试与修改bug.为他起名为AdaptivePromptDialogBox(就是自适应文案提示框): 呆毛地址:https://github.com/NIUXINGJIAN/AdaptivePromptDialogBox.git [创作背景]:今天服务器返回的提示文案过于长,原来自定义实现的黑框效果不能满足.我想办法去让他自适应宽度和高度.在做到页面无数图片加载的时候,我自己封装了一个方法,用起来很好用,决定将其定为该方

iOS简单易用的标签列表界面

iOS简单易用的标签列表界面 Demo效果: Demo演示: 1.使用cocoapods引入YZTagListView,或者直接拖入YZTagListView文件夹到项目中 2.导入YZTagListView.h头文件 1 #import "YZTagList.h" 3.创建YZTagListView控件 1 2 3   YZTagList *tagList = [[YZTagList alloc] init];   tagList.backgroundColor = [UIColor

iOS时间轴的实现

最近项目需求,恰好要做一个时间轴,而iOS这方面时间轴的例子也比较少,我就把自己所做的例子和思路共享出来给大家,共同学习. 时间轴的具体实现效果如图1所示:  图1 第一步:看到这个图,我们想到的第一反应就是使用tableView或者CollectionView来完成,那么我这里使用的是tableView.首先,创建一个Single View Application项目,在Main.Storyboard里面拖入一个TableView(如图2所示),这里别忘记了把TableView的delegat

iOS中各种风格时间轴的设计及总结

前言 上一篇给大家总结了绘图各种画法,今天紧接着给大家在总结时间轴的各种设计,其中也用到了绘图. 时间轴有什么作用呢? 现在在项目当中时间轴已经变得无处不在了.最典型的就是社交媒体了,像Facebook和人人网这样的SNS社区会将你的生活以时间轴的形式呈现出来,QQ,微博和Twitter也自不必说,同样以时间轴来排列信息,而移动APP Path更是以时间轴而出名. 时间轴不仅帮助用户梳理信息,更是用户交互的基础规则. 今天就给大家讲讲各种时间轴风格的不同实现.在这里先让大家看看这3种时间轴风格的

简单易做,朴实好吃——小在在家的200个家常菜

简单易做,朴实好吃——小在在家的200个家常菜  http://bbs.tianya.cn/post-96-631139-1.shtml

网页效果-简单的时间轴实现

之前在网上看到,有很多人写的时间轴效果,于是自己也模仿着写了写.以下贴出自己写的解决方法(横向轴与纵向轴). 简单的时间轴效果容易实现,但如果需要看起来有模有样,就需要对页面进行设计布置了. 1.利用Js加简单的界面布置,实现时间轴鼠标点击轮换图片效果(纵向). 实现思路:利用多个div加背景色做纵向时间轴的样式,用CSS进行定位布局(时间轴一般都相对于浏览器窗口位置进行定位,避免浮动),再加上相应的文字描述.(:after,:before等一样能实现其效果),最后在用Js添加一些简单的鼠标事件

Android 时间轴

效果图: 数据是随便填的,显得有点乱,但是不影响效果.实现方面主要是用ListView来实现,主要是根据ListView的item位置与上一条数据进行比较,来控制时间的显示隐藏效果.思路很简单,下面看代码实现: 首先是页面的整体布局,很简单,就一个ListView: res/layout/activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

timeline时间轴进度“群英荟萃”

timeline时间轴进度“群英荟萃” 是日,无论PC项目还是APP,都涉及到了通常称谓的“时间轴”UI展现布局.产品和设计师都喜欢横向.纵向的时间轴来传达产品的寓意.如此,如斯!总结一套 timeline时间轴 大家族的“群英荟萃”. 1.时间轴进度条-PC版 结构简单的如下: <div class="pub-wrap"> <ul class="pub-process"> <li class="active">

Thinkbox.Deadline.v8.0.4.1.Linux 1DVD简单易用的管理和渲染+Xpedition Enterprise VX.2.1

Allen Bradley RSLogix5 v8.0 Win32-ISO 1DVD 使用RSLogix 5000 软件可以完全实现对模块的设置和监视 通过I/O 实现ControlLogix 背板连接 所有模块相关数据都包含在一个处理器数据对象中,这便于配置,监视和连接模块参数.RSLogix 5000功能更加强大,更加方便实用.RsLogix 5000编程软件除了为顺序控制提供梯形图编程外,还可以为运动控制提供完整的编程及调试支持.RSLogix 5000可同时完成顺序控制与运动控制. Sy