网易新闻首页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都是丑丑的样子,随手画 ...
随机推荐
- 在Sharepoint中批量删除大量条目
在Sharepoint开发中可能需要一次删除成百上千条记录,这时候如果轮询SPList.Items并直接调用该对象的删除方法来删除的话性能极差,会叫你崩溃. 下面介绍一个快速删除大量数据的方法: us ...
- HTTP初步注解
搜集了一下网上的资源和自己看过的一些书,小小总结了一波HTTP,现在也只是很肤浅的了解,期望以后深入理解后能写出更有营养的笔记. HTTP协议的主要特点 + 支持客户/服务器模式.+ 简单快速:客户向 ...
- BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
MST...一开始没注意-1结果就WA了... ---------------------------------------------------------------------------- ...
- Lucence.net索引技术 二
一. Lucene索引创建和优化 [版本2.9.0以上] Lucene索引的创建首先需要取得几个必须的对象: 1.分词器//可以采用其他的中文分词器 StandardAnalyzer analyzer ...
- 实时消息传输协议 RTMP(Real Time Messaging Protocol)
实时消息传输协议(RTMP)最初是由 Macromedia 为互联网上 Flash player 和服务器之间传输音频.视频以及数据流而开发的一个私有协议.Adobe 收购 Macromedia 购以 ...
- C# Mutex
Mutex Mutex 类似于C# lock, 区别在于一个Mutex可以在多个进程间使用.也就是说Mutex既是computer-wide又是application-wide. 注意: 获取和释放M ...
- MySql 数据库定时备份
1.使用sqldump+任务计划 mysqldump备份成sql文件==============假想环境:MySQL 安装位置:C:\MySQL论坛数据库名称为:bbsMySQL root 密 ...
- 哈希长度扩展攻击的简介以及HashPump安装使用方法
哈希长度扩展攻击(hash length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段.该攻击适用于在消息与密钥的长度已知的情形下,所有采取了 H(密钥 ∥ ...
- [LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree
题目来源: https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题意分析: 给出一个排好序的数组,根据这 ...
- 数据结构与算法分析 3.4&3.5 — 链表的交与并算法
代码: #include <list> template<typename ElementType> list<ElementType> Intersect(con ...