Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

linushao/CorePagesView

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

10 Commits

Repository files navigation

Charlin出框架的目标:简单、易用、实用、高度封装、绝对解耦!

CorePagesView

列表滚动视图,性能王者!

####框架说明: .本框架主要是为了解决类似以下界面的而生: .网易新闻列表 .越狱版的同步推(没越狱的没用过,不知道是不是一样的) .还有我自己做的项目如铁路wifi,车联网都使用到了这样的界面 .等等,这种需求非常常见。 大概的界面是:一个页面需要左右滑动,切换子控制器,同时顶部有tab标题,点击也可以滑动到对应的页面。 ####框架来由: 为什么要写这个框架,感觉功能不是很多啊?
首先要说的是这个需求其实是非常复杂的,我写的这个框架有上千行代码,里面有很多细节是需要注意的
2.1 子控制器的数量不是固定的,这个需求有3个,下一个需求有4个。甚至网易新闻那种可定制化菜单,数量是不确定的。

2.2 由于数量不确定,所以对整个需求加大了难度,同时如果像网易那种,有十来个子控制器,如果你敢一个全部加载,只能引发内存问题,我之前做了一个项目叫铁路wifi,有8个新闻栏目同时加载,在iphone 4上面直接卡死8秒左右才有反应。

2.3 你仔细观察网易新闻,你会发现当点击tab切换,3分钟左右会触发新闻列表页面的刷新,当然这个新闻页面的刷新绝对不是本框架去关心的,这个是属性CoreList类型的加载框架应该做的事情,换句话说,为了解耦,你点击切换tab,只有在一种情况下才能触发,那就是触发子控制器的生命周期方法如viewDidAppear:和viewDidDisappear:,同时也涉及性能问题,我们需要动态添加和移除子视图。这个也是比较复杂的。同时添加和移除需要考虑很多问题,如子列表的位置,比如移除前子列表是一个tableView显示在第20行,移除添加之后最好还是在这个位置,给人一种没有动过的感觉。

2.4 对于顶部的菜单来说,也有很多种样式,有的是一个按钮就很宽的,有的是图片加文字,有的是居中但是不是很宽,所以这些都是可以封装的,同时也是可以自定义修改的。

2.5 scrollView的滚动切换与点击tab的切换是逻辑的,是可以封装的,同时如果顶部菜单数量过多,还需要动态调整让当前显示在中间。这些都是可以封装起来的。

2.6 需要考虑屏幕旋转及横竖屏的问题。

####项目解析 本框架写了一周左右(我正在做车联网,写框架的时间不是很多),写框架的时间考虑的问题还是算比较全面, 下面就对如果自定义出你想要的样式,核心思想、重要代码以及使用做出一个解释。

3.1.如果集成:<br />
CorePagesView是一个view,他需要一个配置模型数组,传入模型数组即可完成安装:
 -(CorePagesView *)pagesView{
if(_pagesView==nil){
 //index以及title属性是模拟数据,并非框架使用。
 OrderListTVC *list0TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list0TVC.index=0;
 list0TVC.titleStr=@"未接单"; 
 
 OrderListTVC *list1TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list1TVC.index=1;
 list1TVC.titleStr=@"接单中";
 
 OrderListTVC *list2TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list2TVC.index=2;
 list2TVC.titleStr=@"审核中";
 
 OrderListTVC *list3TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list3TVC.index=3;
 list3TVC.titleStr=@"已完成";
 
 OrderListTVC *list4TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list4TVC.index=4;
 list4TVC.titleStr=@"未接单";
 
 OrderListTVC *list5TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list5TVC.index=5;
 list5TVC.titleStr=@"接单中";
 
 OrderListTVC *list6TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list6TVC.index=6;
 list6TVC.titleStr=@"审核中";
 
 OrderListTVC *list7TVC=[[OrderListTVC alloc] initWithStyle:UITableViewStylePlain];
 list7TVC.index=7;
 list7TVC.titleStr=@"已完成";
 
 CorePageModel *model0=[CorePageModel model:list0TVC pageBarName:@"已完成"];
 CorePageModel *model1=[CorePageModel model:list1TVC pageBarName:@"未接单"];
 CorePageModel *model2=[CorePageModel model:list2TVC pageBarName:@"接单中"];
 CorePageModel *model3=[CorePageModel model:list3TVC pageBarName:@"审核中"];
 CorePageModel *model4=[CorePageModel model:list4TVC pageBarName:@"已完成已"];
 
 CorePageModel *model5=[CorePageModel model:list5TVC pageBarName:@"未接单"];
 CorePageModel *model6=[CorePageModel model:list6TVC pageBarName:@"接单"];
 CorePageModel *model7=[CorePageModel model:list7TVC pageBarName:@"审核中"];
 
 
 NSArray *pageModels=@[model0,model1,model2,model3,model4,model5,model6,model7];
 _pagesView=[CorePagesView viewWithOwnerVC:self pageModels:pageModels];
}
 return _pagesView;
}
控制器直接添加此view即可。
3.2 实例化方法说明:
 /**
 * 快速实例化对象
 *
 * @param ownerVC 本视图所属的控制器
 * @param pageModels 模型数组
 *
 * @return 实例
 */
+(instancetype)viewWithOwnerVC:(UIViewController *)ownerVC pageModels:(NSArray *)pageModels;
3.3如何配置出你想要的样式?
 /**
 * 动态值:动态值主要是用于设备判断,当tab数量较少,需要以设备来决定宽度时使用
 */
/**
 * 顶部按钮的基本宽度
 */
#define CorePagesBarBtnWidth 100
/**
 * 顶部按钮的扩展宽度,可修改下划线的宽度
 */
#define CorePagesBarBtnExtraWidth 60
/**
 * 是否使用自定义的宽度,如果不使用,则框架自行计算宽度
 */
#define CorePagesBarBtnUseCustomWidth NO
/**
 * bar条的高度
 */
UIKIT_EXTERN CGFloat const CorePagesBarViewH;
/**
 * 字体大小
 */
UIKIT_EXTERN CGFloat const CorePagesBarBtnFontPoint;
/**
 * 顶部菜单最左和最右的间距
 */
UIKIT_EXTERN CGFloat const CorePagesBarScrollMargin;
/**
 * 菜单按钮之间的间距
 */
UIKIT_EXTERN CGFloat const CorePagesBarBtnMargin;
/**
 * 线条多余长度(单边)
 */
UIKIT_EXTERN CGFloat const CorePagesBarLineViewPadding;
/**
 * 主体内容区间距值
 */
UIKIT_EXTERN CGFloat const CorePagesMainViewMargin;
/**
 * 动画时长
 */
UIKIT_EXTERN CGFloat const CorePagesAnimDuration;

####.效果图片
image

image

image

image




CorePagesView 列表滚动视图,性能王者!



版权说明 RIGHTS

作品说明:本框架由iOS开发攻城狮Charlin制作。
作品时间: 2013年03月25日 18:07

关于Chariln INTRODUCE

作者简介:Charlin-四川成都华西都市报旗下华西都市网络有限公司技术部iOS工程师!

联系方式 CONTACT

Q Q:1761904945(请注明缘由)
Mail:1761904945@qq.com

About

列表滚动视图,性能王者!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Objective-C 100.0%

AltStyle によって変換されたページ (->オリジナル) /