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都是丑丑的样子,随手画 ...
随机推荐
- CentOS6.5自带Python2.6.6升级至Python2.7
CentOS6.5中Python2.6升级到Python2.7 由于Python开发团队已不再支持2.6版本,且该版本对一些软件不支持,因此将2.6升级到2.7. 1.安装Python2.7: 下载源 ...
- intellij idea 生成UUID
Intellij IDEA 默认没启用这个功能 需要手动设置一下 , 下面是路径 Setting->Inspections->Serialization issues->Serial ...
- python代码随笔
此篇随笔只是作为自己偶然想起的遇到过的代码片段..记录下! 1.巧用lambda,reduce实现多层嵌套的装饰器: 示例如下: #示例 函数chain([a,b,c,d) (input), 最终实现 ...
- IQueryable 和 IEnumerable
IQueryable 和 IEnumerable 其实,对于上面的即有过虑又有排序的条件查询Linq语句,EF是读取数据库中整个Books表中的数据到内存,还是根据Linq查询语句智能的生成SQL再执 ...
- 关于wkwebview
一.引入库 #import <WebKit/WebKit.h> 二.初始化有两种方式 // 默认初始化 - (instancetype)initWithFrame:(CGRect)fram ...
- canvas烟花-娱乐
网上看到一个释放烟花的canvas案例,很好看哦. 新建文本,把下面代码复制进去,后缀名改为html,用浏览器打开即可. 看懂注释后,可以自己修改烟花的各个效果.我试过让烟花炸成了心型.:-) < ...
- 在GNU/Linux下将CD音乐转为mp3
以前我欣赏古典音乐都是听的CD,因而珍藏了不少光盘以及下载到电脑上的ape与flac格式的音乐文件.随着手机硬件性能(如电池续航能力.处理器速度.音质.存储容量等)和软件功能(音乐播放器对于曲目的管理 ...
- linode开通Paypal付款方式
vps服务器品牌linode近期新闻不断.今天是linode成立13周年,全部套餐免费升级翻倍内存,所以现在linode最低配置套餐内存是2GB,每月2TB流量,40Gb机房带宽,非常超值. 长期以来 ...
- php笔记(二)PHP类和对象之Static静态关键字
PHP类和对象之Static静态关键字 静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用. class Car { pr ...
- put a favicon for github pages
put the picture "favicon.ico" in the root of your web page repo.then add the following lin ...