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都是丑丑的样子,随手画 ...
随机推荐
- radio里面value值与其他字符进行比较
本题旨在创建一个具有及时反馈的选择题,当选完其中一个选项后,会有弹窗来提醒你选择的答案是正确还是错误的.<div id="text" style="display: ...
- iOS ARC与MRC混编的一些解决方法
1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MR ...
- SqlParameter 中 top 的使用
public DataTable GetAdminTopDCSCheckReport(int top) { StringBuilder strSql = new StringBuilder(); st ...
- Java动态解压zip压缩包
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; impo ...
- Elasticsearch 5.0 _all field的简单认识
前言:本文的目的是为后续磁盘空间利用优化做铺垫,主要知识点来源于官网 一._all 是什么 在Elasticsearch中,_all field维护这一个很大的字符串数组(text类型).这个字符串是 ...
- SEO之关键词选择
在网站优化中,关键词应该是奠基石,选择好关键词的重要性也不言而喻了.怎样选择合理化的关键词呢?这个是我今天了解到的. 1.选择的关键词首先是有人搜索过的.没人搜索的词优化就是浪费时间. 2.做有效流量 ...
- PAT乙级1002. 写出这个数 (20)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- UML(Unified Modeling Language)同一建模语言
wiki定义: UML is a general-purpose, developmental, modeling language in the field of software engineer ...
- java 缩放函数drawImage理解(个人总结)
drawImagepublic abstract boolean drawImage(Image img, int dx1, ...
- java学习记录
1,接口(不实现任何方法)——>抽象类(实现部分公共方法)——>简单实现类——>具体实现类 2,抽象类不能被直接实例化,只能实现抽象方法,以匿名内部类的方式表现. 3,如果stati ...