网易新闻首页iOS
//
// 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的更多相关文章
- 转:addChildViewController实现网易新闻首页切换
本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里面的 ...
- IOS 类似于网易新闻首页新闻轮播的组件
一.需求分析 1.可横向循环滚动新闻图片 2.滚动到对应图片时显示新闻标题 3.每张新闻图片可点击 4.有pageControl提示 5.具有控件的扩展能力 二.设计实现 1.显示图片使用SDWebI ...
- android 仿网易新闻首页框架
实现思路很简单左侧栏目是一个一个的 Fragment 的,点击时动态替换各个 Fragment 到当前 Activity 中. 关键代码: public void loadFragment(Ma ...
- iOS 网易新闻用到的框架
网易新闻iOS版在开发过程中曾经使用过的第三方开源类库.组件 1.AFNetworking AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务 ...
- 网易新闻iOS版使用的18个开源组件
转载来自:http://www.jianshu.com/p/8952944f7566 原文最后编辑时间:2015.05.19 网易新闻iOS版在开发过程中曾经使用过的第三方开源类库.组件 1.AFN ...
- IOS之分析网易新闻存储数据(CoreData的使用,增删改查)
用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的. 首先: 1.网易新闻用CoreData存储了 ...
- ActionBar+DrawerLayout实现网易新闻客户端首页
一.概述 随着android版本的不断的更新,google推出了越来越多的高级组件,采用这些官方组件我们可以方便的实现一些以前需要通过复杂编码或者使用第三方组件才能实现的效果,比如slidingmen ...
- iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)
本文转载至 http://blog.csdn.net/totogo2010/article/details/8637430 1.介绍 有的博友看了上篇博文iOS界面-仿网易新闻左侧抽屉 ...
- iOS仿网易新闻栏目拖动重排添加删除效果
仿网易新闻栏目选择页面的基本效果,今天抽了点时间教大家如何实现UICollectionView拖动的效果! 其实实现起来并不复杂,这里只是基本的功能,没有实现细节上的修改,连UI都是丑丑的样子,随手画 ...
随机推荐
- Sql 字符串操作类COALESCE
SqlServer中肯定有过将表中某列的值拼接成字符串,以","或者其他符号隔开的情况吧,一般情况我们会这样做: declare @returnValue nvarchar(max ...
- ASP.NET WebApi 简单记录
//获取当前提交过来的Request对象 var request = System.Web.HttpContext.Current.Request;
- Java 重写(Override)与重载(Overload)
1.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变.即外壳不变,核心重写! 参数列表和返回值类型必须与被重写方法相同. 访问权限必须低于父类中 ...
- BZOJ 2982: combination( lucas )
lucas裸题. C(m,n) = C(m/p,n/p)*C(m%p,n%p). ----------------------------------------------------------- ...
- Spring Annotation vs XML - 示例
来源: http://hanqunfeng.iteye.com/blog/2113820 作者hanqunfeng的示例文件: (可下载) web-mvc.zip
- 用Dart开发Android应用(sky应用)
此文运用的是优雅的Markdown而书 流弊的Google公司,为了解决Android的卡顿问题,为此下了是不少的决心,这不最新研发的Sky移动应用UI框架,在用户界面和高质量的UI交互设计,很是让人 ...
- VC使用CRT调试功能来检测内存泄漏
信息来源:csdn C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话.在 C/C+ ...
- TableLayoutPanel 的使用
VS自带控件TableLayoutPanel的功能应用网上都有资料.下面是使用中的一些问题. 1.动态加载控件时使用SetRowSpan.SetColumnSpan方法会使得界面响应缓慢 解决方案: ...
- hpu校赛--雪人的高度(离散化线段树)
1721: 感恩节KK专场——雪人的高度 时间限制: 1 Sec 内存限制: 128 MB 提交: 81 解决: 35 [提交][状态][讨论版] 题目描述 大雪过后,KK决定在春秋大道的某些区间 ...
- 如何判断一个变量是数组Array类型
在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...