转::iOS 仿淘宝,上拉进入详情页面

今天做的主要是一个模仿淘宝,上拉进入商品详情的功能,主要是通过 tableView 与 webView 一起来实现的,当然也可根据自己的需要把 webView 替换成你想要的

  1 //
  2 //  ViewController.m
  3 //  仿淘宝,上拉进入详情
  4 //
  5 //  Created by Amydom on 16/11/22.
  6 //  Copyright ? 2016年 Amydom. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10
 11 @interface ViewController ()<UITableViewDelegate , UITableViewDataSource , UIScrollViewDelegate , UIWebViewDelegate>
 12
 13
 14 @property (nonatomic , strong)UITableView *tableView;
 15
 16 @property (nonatomic , strong)UIWebView *webView;
 17
 18 @property (nonnull , strong)UILabel *headLab;
 19
 20
 21
 22 @end
 23
 24 @implementation ViewController
 25
 26 - (void)viewDidLoad {
 27     [super viewDidLoad];
 28     self.view.backgroundColor = [UIColor whiteColor];
 29
 30     [self createView];
 31
 32
 33 }
 34
 35 - (void)createView{
 36
 37     _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
 38     _tableView.delegate = self;
 39     _tableView.dataSource = self;
 40     _tableView.rowHeight = 60.f;
 41     [self.view addSubview:_tableView];
 42     [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
 43
 44     UILabel *footLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 60)];
 45     footLabel.text = @"继续拖动,查看图文详情";
 46     footLabel.font = [UIFont systemFontOfSize:13];
 47     footLabel.textAlignment = NSTextAlignmentCenter;
 48     _tableView.tableFooterView = footLabel;
 49     //注意:懒加载时,只有用 self 才能调其 getter 方法
 50       [self.view addSubview:self.webView];
 51     _headLab = [[UILabel alloc] init];
 52     _headLab.text = @"上拉,返回详情";
 53     _headLab.textAlignment = NSTextAlignmentCenter;
 54     _headLab.font = [UIFont systemFontOfSize:13];
 55     _headLab.frame = CGRectMake(0, 0, self.view.frame.size.width, 40.f);
 56     _headLab.alpha = 0.f;
 57     _headLab.textColor = [UIColor blackColor];
 58     [_webView addSubview:_headLab];
 59
 60    [ _webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
 61
 62
 63 }
 64
 65 //懒加载 webView 增加流畅度
 66 - (UIWebView *)webView{
 67
 68     //注意,这里不用 self 防止循环引用
 69     if (!_webView) {
 70         _webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, _tableView.contentSize.height, self.view.frame.size.width, self.view.frame.size.height)];
 71         _webView.delegate = self;
 72         _webView.delegate = self;
 73         _webView.scrollView.delegate = self;
 74
 75         [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];
 76     }
 77
 78     return _webView;
 79
 80 }
 81 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
 82
 83     return 15;
 84
 85 }
 86
 87 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 88
 89     static NSString *indetifier = @"cell";
 90     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:indetifier];
 91     cell.textLabel.text = @"Amydom";
 92
 93     return cell;
 94
 95
 96 }
 97
 98 //监测 scroll 的偏移量
 99 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
100 {
101     CGFloat offsetY = scrollView.contentOffset.y;
102
103     if([scrollView isKindOfClass:[UITableView class]]) // tableView界面上的滚动
104     {
105         // 能触发翻页的理想值:tableView整体的高度减去屏幕本省的高度
106         CGFloat valueNum = _tableView.contentSize.height - self.view.frame.size.height;
107         if ((offsetY - valueNum) > 40)
108         {
109
110            [self goToDetailAnimation]; // 进入图文详情的动画
111         }
112     }
113
114     else // webView页面上的滚动
115     {
116         if(offsetY < 0 && -offsetY > 40)
117         {
118             [self backToFirstPageAnimation]; // 返回基本详情界面的动画
119         }
120     }
121 }
122
123 // 进入详情的动画
124 - (void)goToDetailAnimation
125 {
126     [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionLayoutSubviews animations:^{
127         _webView.frame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height);
128         _tableView.frame = CGRectMake(0, -self.view.frame.size.height , self.view.frame.size.width, self.view.frame.size.height);
129     } completion:^(BOOL finished) {
130
131     }];
132 }
133
134
135 // 返回第一个界面的动画
136 - (void)backToFirstPageAnimation
137 {
138     [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionLayoutSubviews animations:^{
139         _tableView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.bounds.size.height);
140         _webView.frame = CGRectMake(0, _tableView.contentSize.height, self.view.frame.size.width, self.view.frame.size.height);
141
142     } completion:^(BOOL finished) {
143
144     }];
145 }
146
147 // KVO观察
148 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
149
150
151     if(object == _webView.scrollView && [keyPath isEqualToString:@"contentOffset"])
152     {
153         [self headLabAnimation:[change[@"new"] CGPointValue].y];
154     }else
155     {
156         [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
157     }
158 }
159
160
161
162
163 // 头部提示文本动画
164 - (void)headLabAnimation:(CGFloat)offsetY
165 {
166     _headLab.alpha = -offsetY/60;
167     _headLab.center = CGPointMake(self.view.frame.size.width/2, -offsetY/2.f);
168     // 图标翻转,表示已超过临界值,松手就会返回上页
169     if(-offsetY > 40){
170         _headLab.textColor = [UIColor redColor];
171         _headLab.text = @"释放,返回详情";
172     }else{
173         _headLab.textColor = [UIColor blackColor];
174         _headLab.text = @"上拉,返回详情";
175     }
176 }
177 - (void)didReceiveMemoryWarning {
178     [super didReceiveMemoryWarning];
179     // Dispose of any resources that can be recreated.
180 }
181
182
183 @end

时间: 2024-12-29 11:22:27

转::iOS 仿淘宝,上拉进入详情页面的相关文章

一款仿淘宝购物的商品列表页面多条件查询(含有单选和全部)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

iOS 仿淘宝加入购物车前选择尺寸,规格弹窗的向内凹陷折叠动画效果和标签流布局

项目中做了一套电商的购物流程,很多都是照着淘宝做的,之前一直疑惑淘宝的弹框 时,底部的控制器向内凹陷是什么鬼,这动画有点理解不了,一直就放着没有做,这周 末突然在github上看到一个老外写的库,真的有点强啊,我这里简单写了个Demo给大家分析下,然后再用这个牛B的库集成下展示最终成果 老规矩,看图说话,一个是自己写的Demo,一个是通过库展示给大家       在介绍库之前先自己写个Demo捋一捋思路 第一个View:根部控制器,我们设置为黑色 第二个View:根部VC上面加载另一个用来做动画

Listview嵌套Viewpager实现仿淘宝搜狐广告主页,并实现listview的下拉刷新

Android实现功能:Listview嵌套viewpager仿淘宝搜狐视频主页面,和listview的下拉刷新. 什么都不说了:直接上图说效果 listview嵌套viewpager实现仿淘宝的广告滑动主页面 源码连接:(http://download.csdn.net/detail/qq_30000411/9528977) APK下载连接:(http://download.csdn.net/detail/qq_30000411/9528973) 下面给出我源码的主要文件构成: MyListV

仿淘宝左侧菜单导航栏纯Html + css 写的

这俩天闲来没事淘宝逛了一圈看到淘宝的左侧导航菜单做的是真心的棒啊,一时兴起,查了点资料抓了几个图片仿淘宝写了个css,时间紧写的不太好,大神勿喷,给小白做个参考 废话不多说先来个效果图 接下来直接上代码,图片没法传,只能直接放代码下边,辛苦点一张一张扣去吧?? HTML部分 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd

仿淘宝商品浏览界面, 向上拉查看详情

最新项目中有展示类似淘宝商品详情的功能,主要实现  向上拉查看详情,百度一搜,发现有大神已经实现这个效果了 http://blog.csdn.net/zhongkejingwang/article/details/38656929 写的很棒.用2个ScrollView 实现上拉查看详情的功能 可是发如今用在我的项目有点问题,有些小的需求没有实现,所以就在这位大神的基础上加入了简单的功能 1. 事件回调.   第二页全然显示出来的回调,能够用来载入数据 2. 事件回调.   当用户滑到第一个Scr

ios 类似淘宝商品详情页面的效果

今天试着写ios 类似淘宝商品详情页面的效果 我用到的第三方库EGORefreshTableHeaderView下拉刷新的效果还有就是PWLoadMoreTableFooterView上拉加载更多 主要的思路在于UISCrollView两页,一页展示商品概况,另一页展示商品更多详情 首先,第一页的view包含一个UITableView,这个tableView实现PWLoadMoreTableFooterView中的delegate方法, 实现delegate代理方法的时候使用 - (void)s

高仿淘宝客户端

高仿淘宝客户端 仿淘宝安卓客户端的demo源码,主要实现了:商品的基本展示.宝贝详情,图片展示的放大缩小功能.界面之间切换的动画.购物车多项删除.弹窗的动画效果.首页广告的轮播效果.获得本机具有传感器的列表.listView的上拉刷新,下拉加载功能.二维码扫描.刮刮乐等功能和效果. 下载地址:http://www.devstore.cn/code/info/925.html 运行截图:    

自定义View之仿淘宝详情页

自定义View之仿淘宝详情页 转载请标明出处: http://blog.csdn.net/lisdye2/article/details/52353071 本文出自:[Alex_MaHao的博客] 项目中的源码已经共享到github,有需要者请移步[Alex_MaHao的github] 基本介绍 现在的一些购物类App例如淘宝,京东等,在物品详情页,都采用了类似分层的模式,即上拉加载详情的方式,节省了空间,使用户的体验更加的舒适.只要对于某个东西的介绍很多时,都可以采取这样的方式,第一个页面显示

仿淘宝页面的搜索引擎,点击输入框文字不消失

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 #txt { 8 position: relative; 9 10 } 11 #lbl { 12 position: absolute; 13 top: 8px; 14 left: 1