//

//  ViewController.m

//  wyy

//

//  Copyright © 2016年 zm. All rights reserved.

//

#import "ViewController.h"

#import "ZMViewController.h"

#import "ZMLabel.h"

@interface ViewController ()<UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *titleScrllView;

@property (weak, nonatomic) IBOutlet UIScrollView *contentScrollview;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.automaticallyAdjustsScrollViewInsets = NO;

self.title = @"网易新闻";

[self setUpChildVC];

[self setUpTitle];

//默认选中第一页  调用此方法

[self scrollViewDidEndScrollingAnimation:self.contentScrollview];

}

//创建头部标题视图

- (void)setUpTitle{

CGFloat w = 100;

CGFloat y = 0;

CGFloat h = self.titleScrllView.frame.size.height;

for (int i = 0; i < 7; i++) {

ZMLabel *lable = [[ZMLabel alloc]initWithFrame:CGRectMake(i*w, y, w, h)];

lable.text = [self.childViewControllers[i] title];

//给lable添加手势

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];

[lable addGestureRecognizer:tap];

[self.titleScrllView addSubview:lable];

}

self.titleScrllView.contentSize = CGSizeMake(7*w, 0);

self.contentScrollview.contentSize = CGSizeMake(7*[UIScreen mainScreen].bounds.size.width, 0);

}

- (void)tap:(UITapGestureRecognizer *)tap{

NSInteger index = [self.titleScrllView.subviews indexOfObject:tap.view];

//通过手势设置内容滚动视图的偏移量

[self.contentScrollview setContentOffset:CGPointMake([UIScreen mainScreen].bounds.size.width * index, 0) animated:YES];

}

//当动画结束时调用此方法

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{

CGFloat w = scrollView.frame.size.width;

CGFloat h = scrollView.frame.size.height;

CGFloat offsetX = scrollView.contentOffset.x;

NSInteger index = offsetX/w;

ZMLabel *lab = self.titleScrllView.subviews[index];

CGFloat offsetx = lab.center.x - scrollView.frame.size.width*0.5;

//判断offsetx最大最小值两种情况

if (offsetx < 0) {

offsetx = 0;

}

if (offsetx > (self.titleScrllView.contentSize.width - scrollView.frame.size.width)) {

offsetx = self.titleScrllView.contentSize.width - scrollView.frame.size.width;

}

self.titleScrllView.contentOffset = CGPointMake(offsetx, 0);

UIViewController *zm = self.childViewControllers[index];

if ([zm isViewLoaded]) return;

zm.view.frame = CGRectMake(index *w, 0, w, h);

[self.contentScrollview addSubview:zm.view];

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

[self scrollViewDidEndScrollingAnimation:scrollView];

}

- (void)setUpChildVC{

ZMViewController *zm = [[ZMViewController alloc]init];

zm.title = @"新闻";

[self addChildViewController:zm];

ZMViewController *zm1 = [[ZMViewController alloc]init];

zm1.title = @"军事";

[self addChildViewController:zm1];

ZMViewController *zm2 = [[ZMViewController alloc]init];

zm2.title = @"政治";

[self addChildViewController:zm2];

ZMViewController *zm3 = [[ZMViewController alloc]init];

zm3.title = @"娱乐";

[self addChildViewController:zm3];

ZMViewController *zm4 = [[ZMViewController alloc]init];

zm4.title = @"社会";

[self addChildViewController:zm4];

ZMViewController *zm5 = [[ZMViewController alloc]init];

zm5.title = @"科技";

[self addChildViewController:zm5];

ZMViewController *zm6 = [[ZMViewController alloc]init];

zm6.title = @"啦啦";

[self addChildViewController:zm6];

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

CGFloat scale = scrollView.contentOffset.x/scrollView.frame.size.width;

NSInteger leftIndex = scale;

NSInteger rightIndex = scale+1;

if (scale < 0 || scale > self.titleScrllView.subviews.count-1) return;

CGFloat rightScale = scale - leftIndex;

CGFloat leftScale = 1-rightScale;

ZMLabel *leftLabel = self.titleScrllView.subviews[leftIndex];

ZMLabel *rightLabel = (rightIndex == self.titleScrllView.subviews.count)?nil:(self.titleScrllView.subviews[rightIndex]);

leftLabel.scale = leftScale;

rightLabel.scale = rightScale;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

// 自定义一个lable 继承于uilable

//

//  ZMLabel.m

//  wyy

//

//  Copyright © 2016年 zm. All rights reserved.

//

#import "ZMLabel.h"

@implementation ZMLabel

- (instancetype)initWithFrame:(CGRect)frame{

if (self =[super initWithFrame:frame]) {

self.textAlignment = NSTextAlignmentCenter;

self.userInteractionEnabled = YES;

self.textColor = [UIColor blackColor];

self.font = [UIFont systemFontOfSize:15];

}

return self;

}

- (void)setScale:(CGFloat)scale{

CGFloat transform = scale*0.3+1;

self.transform = CGAffineTransformMakeScale(transform, transform);

self.textColor = [UIColor colorWithRed:transform-1 green:0 blue:0 alpha:1];

}

@end

//创建控制器   这里可以为了简易就只创建一个控制器

//

//  ZMViewController.m

//  wyy

//

//  Copyright © 2016年 zm. All rights reserved.

//

#import "ZMViewController.h"

@interface ZMViewController ()

@end

@implementation ZMViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

#warning Incomplete implementation, return the number of sections

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

#warning Incomplete implementation, return the number of rows

return 50;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"forIndexPath:indexPath];

cell.textLabel.text = [NSString stringWithFormat:@"%@-%ld",self.title,indexPath.row];

return cell;

}

@end

网易新闻首页iOS的更多相关文章

  1. 转:addChildViewController实现网易新闻首页切换

    本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里面的 ...

  2. IOS 类似于网易新闻首页新闻轮播的组件

    一.需求分析 1.可横向循环滚动新闻图片 2.滚动到对应图片时显示新闻标题 3.每张新闻图片可点击 4.有pageControl提示 5.具有控件的扩展能力 二.设计实现 1.显示图片使用SDWebI ...

  3. android 仿网易新闻首页框架

       实现思路很简单左侧栏目是一个一个的 Fragment 的,点击时动态替换各个 Fragment 到当前 Activity 中. 关键代码: public void loadFragment(Ma ...

  4. iOS 网易新闻用到的框架

    网易新闻iOS版在开发过程中曾经使用过的第三方开源类库.组件 1.AFNetworking AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务 ...

  5. 网易新闻iOS版使用的18个开源组件

    转载来自:http://www.jianshu.com/p/8952944f7566  原文最后编辑时间:2015.05.19 网易新闻iOS版在开发过程中曾经使用过的第三方开源类库.组件 1.AFN ...

  6. IOS之分析网易新闻存储数据(CoreData的使用,增删改查)

    用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的. 首先: 1.网易新闻用CoreData存储了 ...

  7. ActionBar+DrawerLayout实现网易新闻客户端首页

    一.概述 随着android版本的不断的更新,google推出了越来越多的高级组件,采用这些官方组件我们可以方便的实现一些以前需要通过复杂编码或者使用第三方组件才能实现的效果,比如slidingmen ...

  8. iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)

     本文转载至  http://blog.csdn.net/totogo2010/article/details/8637430       1.介绍 有的博友看了上篇博文iOS界面-仿网易新闻左侧抽屉 ...

  9. iOS仿网易新闻栏目拖动重排添加删除效果

    仿网易新闻栏目选择页面的基本效果,今天抽了点时间教大家如何实现UICollectionView拖动的效果! 其实实现起来并不复杂,这里只是基本的功能,没有实现细节上的修改,连UI都是丑丑的样子,随手画 ...

随机推荐

  1. 多个viewpager可能产生的问题

    由于Fragment的方便性,现在很多人开始大量使用Fragment. 今天使用时遇到各问题,记录下来并分享下. 使用Fragment都会用FragmentActivity ,特别是在用到ViewPa ...

  2. sql表连接的几种方式

    这里有两张表TableA和TableB,分别是姓名表和年龄表,用于我们例子的测试数据 TableA id name 1 t1 2 t2 4 t4 TableB id age 1 18 2 20 3 1 ...

  3. iOS中的地图和定位

    文章摘自http://www.cnblogs.com/kenshincui/p/4125570.html#location  如有侵权,请联系删除. 概览 现在很多社交.电商.团购应用都引入了地图和定 ...

  4. linux下core文件调试方法(转载)

    转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题, ...

  5. ORA-12514(TNS:监听程序当前无法识别...)

    记录: ORA-12514(TNS:监听程序当前无法识别...)的解决方案 在安装ORACLE 11G 过程中由于配置的原因,安装过程中报了如下错误:   按照安装提示执行后面的操作后,打开PL/SQ ...

  6. A Byte of Python 笔记(10)输入/输出:文件和储存器

    第12章  输入/输出 大多数情况下,我们需要程序与用户交互.从用户得到输入,然后打印一些结果. 可以分别使用 raw_input 和 print 语句来完成这些功能.对于输出,可以使用多种多样的 s ...

  7. jQuery 层级选择器 + keyCode

    层次选择器 如果想通过DOM元素之间的层次关系来获取特定的元素,例如后代元素,子元素,相邻元素和兄弟元素等,那么层次选择器是一个非常好的选择. 层次选择器规则如下: 层次选择器 选 择 器 描 述 返 ...

  8. 未能加载文件或程序集“xxxx”或它的某一个依赖项

    一般是解决方案中相互依赖的项目生成的目标平台不一样所致,更改为相同目标即可!

  9. Protel 99SE PCB 打印技巧

    1. 打开 Protel99SE PCB 设计文档.从菜单File 下单击Print/Preview 打印预览菜单.出现PCB 打印预览介面. 2.从File 下单击 Setup Printer 设置 ...

  10. 基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串

    编程实现:找出两个字符串中最大公共子字符串,如"abccade"和"dgcadde"的最大子字符串为"cad". 如果不考虑效率的话直接比较 ...