IOS 类似网易新闻客户端内容滚动菜单跟随居中组件
需求分析:
1、类似网易新闻客户端页面滚动组件、菜单栏对应菜单项一直居中
2、点击菜单栏可以切换到对应的page
3、滑动页面可以自动切换相应的菜单、并且对应的菜单栏居中显示
4、初始化时可以自定义菜单项
5、菜单内容、页面内容自定义
设计实现:
1、菜单和页面内容分别设计为两个横向滚动的UITableView,将两个横向滚动的tableView 放置在一个UIView中
2、点击菜单栏时响应该事件,并将页面切换到响应页
3、内容页面滚动停止时,将对应菜单项滚动到中间
实现效果:

四、关键代码
1、横向的tableview 如何实现
- (UITableView *)topMenuTableView
{
if(nil == _topMenuTableView)
{
CGFloat topMenuHeight = TopTabControl_Default_TopMenuHeight;
if([self.datasource respondsToSelector:@selector(TopTabHeight:)])
{
topMenuHeight = [self.datasource TopTabHeight:self];
} //before rotate bounds = (0, 0, width, height) , rototate -90 bounds = (0, 0, height, width)
CGFloat x = CGRectGetWidth(self.frame)/ - topMenuHeight/;
CGFloat y = -CGRectGetWidth(self.frame)/ + topMenuHeight/;
CGRect topMenuRect = CGRectMake(x, y, topMenuHeight, CGRectGetWidth(self.frame));
_topMenuTableView = [[UITableView alloc] initWithFrame:topMenuRect
style:UITableViewStylePlain];
[self addSubview:_topMenuTableView];
_topMenuTableView.backgroundColor = [UIColor randomColor];
_topMenuTableView.dataSource = self;
_topMenuTableView.delegate = self;
_topMenuTableView.showsVerticalScrollIndicator = NO;
_topMenuTableView.transform = CGAffineTransformMakeRotation(-M_PI / ); }
return _topMenuTableView;
} - (UITableView *)contentTableView
{
if(nil == _contentTableView)
{
CGFloat contentHeight = CGRectGetWidth(self.frame);
CGFloat contentWidth = CGRectGetHeight(self.frame) - [self getMenuHeight];
CGFloat x = CGRectGetWidth(self.frame)/ - contentWidth/;
CGFloat y = (CGRectGetHeight(self.frame) - [self getMenuHeight])/ - contentHeight/ + ([self getMenuHeight]);
CGRect contentRect = CGRectMake(x, y, contentWidth, contentHeight);
_contentTableView = [[UITableView alloc] initWithFrame:contentRect
style:UITableViewStylePlain];
[self addSubview:_contentTableView]; _contentTableView.backgroundColor = [UIColor randomColor];
_contentTableView.dataSource = self;
_contentTableView.delegate = self;
_contentTableView.showsVerticalScrollIndicator = NO;
_contentTableView.pagingEnabled = YES;
_contentTableView.transform = CGAffineTransformMakeRotation(-M_PI / );
} return _contentTableView;
}
2、协议接口
/** @brief TopTabControl datasource 需要支持的协议 */
@protocol TopTabControlDataSource<NSObject> @optional /**
* 得到顶部菜单栏的高度
*
* @param tabCtrl tab控件
*
* @return 高度(像素)
*/
- (CGFloat)TopTabHeight:(TopTabControl *)tabCtrl; /**
* 得到顶部菜单栏的宽度
*
* @param tabCtrl tab控件
*
* @return 高度(像素)
*/
- (CGFloat)TopTabWidth:(TopTabControl *)tabCtrl; /**
* 得到顶部菜单的个数
*
* @param tabCtrl tab控件
*
* @return 返回菜单的个数
*/
- (NSInteger)TopTabMenuCount:(TopTabControl *)tabCtrl; /**
* 得到第几个菜单的view
*
* @param tabCtrl tab控件
* @param index 菜单的index,从0开始
*
* @return 返回单个菜单项
*/
- (TopTabMenuItem *)TopTabControl:(TopTabControl *)tabCtrl
itemAtIndex:(NSUInteger)index; /**
* 得到第几个菜单对应的page内容
*
* @param tabCtrl tab控件
* @param index 菜单的index,从0开始
*
* @return 返回单个菜单页
*/
- (TopTabPage *)TopTabControl:(TopTabControl *)tabCtrl
pageAtIndex:(NSUInteger)index; @end
五、完整代码
https://github.com/liqiushui/TopTabControl
IOS 类似网易新闻客户端内容滚动菜单跟随居中组件的更多相关文章
- 类似网易新闻 title栏 滚动时 文字放大&变色
http://files.cnblogs.com/files/n1ckyxu/ScrollTitleView.zip
- 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)
原博客地址 :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...
- Android SlidingMenu 仿网易新闻客户端布局
前面两篇文章中的SlidingMenu都出现在左侧,今天来模仿一下网易新闻客户端左右两边都有SlidingMenu的效果,以下是网易新闻客户端效果: 不扯闲话了,直接进入正题吧 frame_conte ...
- ActionBar+DrawerLayout实现网易新闻客户端首页
一.概述 随着android版本的不断的更新,google推出了越来越多的高级组件,采用这些官方组件我们可以方便的实现一些以前需要通过复杂编码或者使用第三方组件才能实现的效果,比如slidingmen ...
- Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...
- Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
摘要: 转载请注明出处:http://blog.csdn.net/allen315410/article/details/42914501 概述 今天这篇博客将记录一些关于DrawerL ...
- Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...
- 分享一个仿网易新闻客户端iPhone版的标签式导航ViewController
该Controller是一个容器,用于容纳其他的controller.效果与网易新闻客户端的标签式导航基本一样: (1)点击上面的标签,可以切换到对应的controller,标签下面的红色提示条的长度 ...
- iOS仿网易新闻栏目拖动重排添加删除效果
仿网易新闻栏目选择页面的基本效果,今天抽了点时间教大家如何实现UICollectionView拖动的效果! 其实实现起来并不复杂,这里只是基本的功能,没有实现细节上的修改,连UI都是丑丑的样子,随手画 ...
随机推荐
- jxl 导入excel
jsp部分 <div class="modal-dialog"> <div class="modal-content"> <div ...
- C++ 部分知识点
1,return语句返回函数的返回值,就是函数的类型,函数只能有唯一的返回值: return可以停止函数,并将控制返回主调函数: 一个函数可以有许多return语句,执行到哪个return语句,哪个起 ...
- 【C#】面试题整理
1.C#中类是否支持多继承?请说明原因.答:不支持,需要用接口来实现多继承 2.我们都知道一个类可以有多个构造函数,并且C#会在我们创建类的时候默认的提供一个无参的构造函数,当我实现了另外一个有参数的 ...
- webpack + vue最佳实践
webpack + vue最佳实践 我的原文地址:http://www.xiaoniuzai.cn/2016/10/04/webpack%20+%20vue%E6%9C%80%E4%BD%B3%E5% ...
- UGUI事件系统
UGUI系统 将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值. PointerEnter-- PointerExit-- PointerDown-- Pointe ...
- Android 不能返回 parent Activity 的问题
使用 ActionBar,开启返回按钮: 在 Activity 的 onCreate 中添加下面代码 getSupportActionBar().setDisplayHomeAsUpEnabled(t ...
- js中的错误检测
<!DOCTYPE html> <html> <body> <script> function myFunction() { try { var x=d ...
- java 获取URL链接 内容
public static String getHtmlConentByUrl(String ssourl) { try { URL url = new URL( ...
- 《Intel汇编第5版》 条件汇编伪指令
一.条件汇编伪指令和宏使用可以使汇编程序更加灵活 二.通过伪指令来检查函数的参数是否为空,如果为空则输出警告信息 INCLUDE Irvine32.inc includelib Irvine32.li ...
- Javascript Date 判断输入日期是否正确
JavaScript的Date对象有容错性,可将随意给定的日期的年月日自动生成正确的日期时间 //JavaScript中Date对象容错性 function dateCheck(){ var date ...