iOS开发-UITableView滑动视差
视差滚动是指让多层背景以不同的速度移动,形成立体的运动效果,在Web上应用的比较多,App中倒是见的相对比较少,主要在UITableView中的应用的比较多,尤其是当整个UITableViewCell的背景是图片的时候,描述内容较少,滑动视差可以增强视觉效果,可以考虑使用,先来简单的看一下效果:

实现起来也比较简单,UITableView定义:
#pragma mark - UITablViewDataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.dataSource count];
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
MainTableViewCell *mainCell=[tableView dequeueReusableCellWithIdentifier:CELLIDENTIFIER forIndexPath:indexPath];
NSString *desc=[NSString stringWithFormat:@"FlyElephant-%ld",indexPath.row];
[mainCell setBackImage:self.dataSource[indexPath.row] description:desc];
return mainCell;
}
#pragma mark - UITableViewDelegate
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 150;
}
滑动的时候修改单元格偏移量:
#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGPoint offset=self.tableView.contentOffset;
for (MainTableViewCell *cell in self.tableView.visibleCells) {
//方式1
// [cell setImagOffset:offset tableView:self.tableView];
//方式2
[cell setAdjustOffset:(cell.frame.origin.y-offset.y)];
}
}
MainTableViewCell定义:
@interface MainTableViewCell : UITableViewCell -(void)setBackImage:(NSString *)imageName description:(NSString *)desc; //视差滑动方式1
-(void)setImagOffset:(CGPoint)contentOffset tableView:(UITableView *)tablView; //视差滑动方式2
-(void)setAdjustOffset:(CGFloat)offset; @end
滑动视差调用方式:
-(void)setImagOffset:(CGPoint)contentOffset tableView:(UITableView *)tablView{
//偏移量
CGFloat cellOffset = self.frame.origin.y - contentOffset.y;
// 偏移量+单元格高度/tableview高度+单元格高度
CGFloat percent = (cellOffset+self.frame.size.height)/(tablView.frame.size.height+self.frame.size.height);
//偏移比例(0-1)
CGFloat extraHeight = self.frame.size.height*OFFSET_RATE;
CGRect frame=self.backImageView.frame;
frame.origin.y=extraHeight*percent;
self.backImageView.frame=frame;
}
-(void)setAdjustOffset:(CGFloat)offset{
CGRect frame = self.backImageView.frame;
frame.origin.y = (offset / 15.0);
self.backImageView.frame = frame;
}
实现起来比较简单,网上有各种各样的版本,这两种的方式算是最简单的实现~
iOS开发-UITableView滑动视差的更多相关文章
- iOS开发UITableView基本使用方法总结
本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...
- iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏
本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...
- iOS开发,UITableView相关问题
第一条:UITableViewCell 内容的设置 //文本放到最后 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArr.co ...
- iOS开发-UITableView自定义Cell
UITableView在iOS中开发的重要地位是毋庸置疑的,基本上应用中用到的比例是一半左右,而且大部分情况都是需要自定义单元格的,这样用户看到的App才能更有美感.之前写过UITableView的基 ...
- IOS开发中滑动页面时NSTimer停止的问题
我们在做倒计时的时候,发现当你手指按着屏幕不放,拖动tableView滑动的时候,写在cell上得倒计时停止倒计时,松开继续倒计时.研究发现就是拖动tableView滑动时,NSTimer停止了. 这 ...
- iOS开发 UITableView之cell
1.cell简介 UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行 U ...
- iOS开发-UISwipeGestureRecognizer滑动手势
滑动手势也算是iOS中交互中很重要的一部分,上下左右滑动,UISwipeGestureRecognizer可以很轻松的解决这个问题,没什么难度直接看代码吧: UISwipeGestureRecogni ...
- iOS开发-UITableView表格优化
之前的一篇文章大概讲述了一下UITableView的使用,UITableView在iOS的地位和ListView在Android中的地位基本上算是不相上下,关于ListView的优化网上的也有很多文章 ...
- iOS开发UITableView的动画cell
1.动画cell 针对cell的动画,在Delegate中对cell的layer进行操作: 2.实现代码 #import "ViewController.h" #import &q ...
随机推荐
- HTTP-崔希凡笔记
HTTP协议(重点) 协议:协议的甲乙双方,就是客户端(浏览器)和服务器! 理解成双方通信的格式! l 请求协议: l 响应协议: 1 安装HttpWatch HttpWatch是专门为IE浏览器 ...
- eclipse 相同变量高亮显示 颜色修改 变量着色
问题描述: 在eclipse中使用快捷键或其他原因,不小心按错了,使得变量的高亮显示没了. 1.简单的办法: 网上搜了一下,原来是Toggle Mark Occurrences (Al ...
- linux卸载openJDK并安装sun jdk
linux下卸载openJDK并安装java 1.查找现在有的jdk rpm -qa | grep java 2.删除jdk rpm -e --nodeps java----- 3.安装jdk 下载j ...
- $watch监听数据变化和run方法
angular中$watch方法可以监听数据的变化. $scope.$watch('phone',function(){ $scope.phone.fre = $scope.phone.num> ...
- DSS中间件介绍
DSS中间件采用HTTP协议,终端可以是任何的支持Http协议的设备,开发工具和语言均不受限制 DMS消息服务, 采用类似HTTP的协议 DSS-API介绍(持续更新) http://www.dioc ...
- java中throw和throws的区别
throw和throws的区别: throws 用在方法声明后面,跟的是异常类名 可以跟多个异常类名,用逗号隔开 表示抛出异常,由该方法的调用者来处理 throws表示出现异常的一种可能性,并不一定会 ...
- Entity Framework Code First 学习
1.添加entityframework 项目-管理解决方案的 NuGet 程序包-联机-Entity Framework 2.code first Migration 工具->库程序包管理器-& ...
- mysql主主复制(双主复制)配置步骤
以前我们介绍的都是主从复制,这里给各位介绍一个双主复制了,下面都希望两个主服务器数据自动复制的话可参考一下此文章. MySQL主主复制结构区别于主从复制结构.在主主复制结构中,两台服务器的任何一台 ...
- 国内从事GIS行业的公司及其网址
www.esrichina-bj.cn esri中国北京http://www.lingtu.com/ 北京灵图软件技术有限公司(三维gis) http://www.spatialport.com.cn ...
- Web大文件上传控件-asp.net-bug修复-Xproer.HttpUploader6.2
版权所有 2009-2016荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...