网易新闻首页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都是丑丑的样子,随手画 ...
随机推荐
- 【中英对照】【EntLib6】【Unity】实验1:使用一个Unity容器
Lab 1: Using a Unity Container 实验1:使用一个Unity容器 Estimated time to complete this lab: 15 minutes 估计完成时 ...
- c 查找A字符串在B字符串中是否存在,计算出现的次数
主要是应用了头文件<string.h>中的strstr函数 char * strstr(const char *s1, const char *s2); 查找是否存在: #include& ...
- URAL 1081 Binary Lexicographic Sequence
第13个位置第5个Bit :13>num[4] =>1 第四个bit 13-num[4]=5 :5<num[3] =>0 ,3-1 第三个Bit 5>num[2](3) ...
- js中||和&&的用法
在js中&&.||不一定都是用来判断一个表达式的逻辑值是true.false,更多的是用来依据真值或者假值执行相应操作! a() && b() :如果执行a()后返回t ...
- 5.4.1 RegExp实例属性
RegExp的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息. 1.global:布尔值,表示是否设置了 g 标志. 2.ignoreCase:布尔值,表示 ...
- [LeetCode]题解(python):007-Reverse Integer
题目来源: https://leetcode.com/problems/reverse-integer/ 题意分析: 这道题目很简单,就是将一个数反转,123变321,-123变321. 题目思路: ...
- linux和windows的文件互传
Linux →→→Windows 1.使用secureCRT:下载文件只需在shell终端仿真器中输入命令"sz 文件名",即可利用Zmodem将文件下载到本地某目录下. 2. s ...
- Round B APAC Test 2017
https://code.google.com/codejam/contest/5254487 A. Sherlock and Parentheses Problem Sherlock and Wat ...
- 利用反馈字段给帝国cms添加留言板功能(图文教程)
帝国cms的插件中提供信息反馈字段,很多人却不会用.这里谢寒教大家如何来给自己的帝国cms网站添加留言板功能 1.找到添加地址 2.添加字段 3.你可以在字段中添加多种字段类型(有文本域,单行文本框, ...
- 射频识别技术漫谈(27)——CPU卡概述
智能卡按安全级别可以分为三类:存储器卡.逻辑加密卡和CPU卡,其中CPU卡是安全级别最高的.从“CPU”这个名字可以看出,CPU卡最大的特点就是卡片里面有一个"CPU",有了CPU ...