[MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]
2015-11-20
很喜欢在安静的状态,
听着音乐,敲着键盘,
和代码们浓情对话,
每一份代码的积累,
都让自己觉得很充实快乐!Y(^_^)Y。
看到58同城app的cell有动画移动出现的特效,很是羡慕,但一直没有想到怎么去实现,今夜看了国外Yalantis团队的一个特效动画开源项目,获得了启发,于是根据自己想要的效果反复调试,终于也做出来了,觉得很开心(^_^)。
刚开始的思路是 通过屏幕可见row数组中去寻找和当前cell的indexPath索引值相符的进行判定,用了[[tableView indexPathsForVisibleRows] indexOfObject:indexPath]的方法, 可是在屏幕滑动太快的情况下会出现bug
//用这个方法来判定不太科学
if([[tableView indexPathsForVisibleRows] indexOfObject:indexPath] == NSNotFound)
{
//如果数据存在,返回指定的下标;
//但如果屏幕滑动太快会导致返回下标不存在,则返回NSNotFund,是一串字符“9223372036854775807” NSLog(@"对象不在数组中===%lu ",[[tableView indexPathsForVisibleRows] indexOfObject:indexPath]); }
接着通过获得可见row数组中的最后一个索引值NSIndexPath *lastIndexPath =[[tableView indexPathsForVisibleRows] lastObject]; 和当前cell的indexPath索引去对应 if (lastIndexPath == indexPath) ,让最后一行cell的出现时展现动画效果
接着就是个人喜好问题上的各种修修补补 (☆_☆)
1、想要屏幕一开始展现时屏幕上能看到的cell也有动画,于是参考Yalantis团队的一个特效动画开源项目代码的思路,在抽方法时进行优化,加了一个type选择判定
2、觉得屏幕下滑时顶部已经展示过的的cell也出现动画太闪眼了, 于是再加上判定
3、当然,还有奇奇怪怪的特殊情况,也给填补了
4、自己调试并且整理了一些动画的效果,以备自己后期项目所用,嘻嘻
//3D旋转动画
// CATransform3D rotation;
// rotation = CATransform3DMakeRotation( (90.0*M_PI)/180, 0.0, 0.7, 0.4);
// rotation.m34 = 1.0/ -600; //移动动画
/*CATransform3DMakeTranslation
(参数: tx::x平移 ty:y平移 tz:z平移)
从左向右移动(-100, 0, 0)[58同城cell移动效果]
从下向上移动(0, 200, 0) [我自己还是比较喜欢这种效果]
从右下向左上移动(100, 100, 0)
从上往下掉落下来(0, -200, 0)
*/
代码:
#pragma mark=====tableview delegate=====
/**
* cell 3D动画
*/
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ NSIndexPath *lastIndexPath =[[tableView indexPathsForVisibleRows] lastObject]; NSLog(@"indexPathsForVisibleRows===%lu====%lu===%ld===%ld",[[tableView indexPathsForVisibleRows] indexOfObject:indexPath],
[[tableView indexPathsForVisibleRows]count],
(long)indexPath.row,
(long)lastIndexPath.row); //最后一行Cell才出现动画
if (lastIndexPath == indexPath) { [self animateVisibleCells:cell index:indexPath.row type:]; //上滑时 为 0 不出现动画
}else if ([[tableView indexPathsForVisibleRows] indexOfObject:indexPath] == ){ //第一次出现屏幕的cell 按照row数 依次 动画 type 1
}else if (indexPath.row < [[tableView indexPathsForVisibleRows]count] ){ [self animateVisibleCells:cell index:indexPath.row type:]; //[特殊处理]如果屏幕滑动太快,返回不存在对象时,cell也出现动画
}else{ [self animateVisibleCells:cell index:indexPath.row type:];
} //用这个方法来判定不太科学
if([[tableView indexPathsForVisibleRows] indexOfObject:indexPath] == NSNotFound)
{
//如果数据存在,返回指定的下标;
//但如果屏幕滑动太快会导致返回下标不存在,则返回NSNotFund,是一串字符“9223372036854775807” NSLog(@"对象不在数组中===%lu ",[[tableView indexPathsForVisibleRows] indexOfObject:indexPath]); }
}
/**
* cell动画
*
* @param cell cell
* @param index cell的row
* @param type type1 按照 row数 延迟展现 动画/ type2不延迟
*/
-(void)animateVisibleCells:(UITableViewCell * )cell index:(NSInteger)index type:(int)type{ CATransform3D translate = CATransform3DMakeTranslation(-100, 0, 0);[58同城cell移动效果]
cell.layer.shadowColor = [[UIColor blackColor]CGColor];
cell.layer.shadowOffset = CGSizeMake(10, 10);
cell.alpha = 0.0f;
cell.layer.transform = translate; [UIView beginAnimations:@"translate" context:NULL];
[UIView setAnimationDuration:0.5f]; //type 1 按照 row数 延迟展现 动画
if (type == 1) {
[UIView setAnimationDelay:index * 0.1];
} cell.layer.transform = CATransform3DIdentity;
cell.alpha = 1.0f;
cell.layer.shadowOffset = CGSizeMake(0, 0);
[UIView commitAnimations]; //旋转动画
// CATransform3D rotation;
// rotation = CATransform3DMakeRotation( (90.0*M_PI)/180, 0.0, 0.7, 0.4);
// rotation.m34 = 1.0/ -600; /*CATransform3DMakeTranslation
(参数: tx::x平移 ty:y平移 tz:z平移)
从左向右移动(-100, 0, 0)[58同城cell移动效果]
从下向上移动(0, 200, 0) [我自己还是比较喜欢这种效果]
从右下向左上移动(100, 100, 0)
从上往下掉落下来(0, -200, 0)
*/ }
[MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]的更多相关文章
- [MISSAJJ原创]cell内 通过SDWebImage自定义创建动态菊花加载指示器
最后更新已经放到了github上了 MISSAJJ自己写的一个基于SDWebImage自定义的管理网络图片加载的工具类(普通图片加载,渐现Alpha图片加载,菊花Indicator动画加载) 经常在项 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数
<zw版·Halcon-delphi系列原创教程> Halcon分类函数001·3D函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“proce ...
- 仿58同城UITableViewCell动画
之前看58同城APP有一个页面中Cell依次从右向左移动,今天试着做了下. 在做的过程中也遇到了几个小的问题,也算是注意点吧. 1.Cell出现时每个Cell的动画时间一样,导致没有依次移动的效果. ...
- 【原创】梵高油画用深度卷积神经网络迭代10万次是什么效果? A neural style of convolutional neural networks
作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作 ...
- UITableViewCell 高度计算从混沌初始到天地交泰
[原创]UITableViewCell 高度计算从混沌初始到天地交泰 本文主要基予iOS UITableViewCell 高度自适应计算问题展开陈述,废话少说直入正题: UITableView控件可能 ...
- iOS UITableViewCell UITableVIewController 纯代码开发
iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...
- 【ios开发】UITableViewCell的重用
移动开发需要解决的一个问题就是资源稀缺的问题.多数情况下是内存问题. 虽然现在的手机都号称大内存,高配置.但是移动app所占用的资源也在跟着不断膨胀, 也是造成内存不足的主要原因. 在前面的例子中,还 ...
- iOS视图弹出、平移、旋转、翻转、剪切等变换效果实现
效果图: 1.定义属性 @property (nonatomic, strong) UIView *transformView;//发生变换的试图 @property (nonatomic, stro ...
- UITableView UITableViewCell
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
随机推荐
- RK3288的gpio设置
http://www.360doc.com/content/14/1227/18/14351252_436191812.shtml 目录 [隐藏] 1 简介 2 使用 2.1 输入输出 2.2 复用 ...
- AngularJS控制器
AngularJS 控制器 控制 AngularJS 应用程序的数据,控制器是常规的 JavaScript 对象. 1. angular.module(name, [requires], [confi ...
- Orcle数据库 表的 内置函数 内链接 外连接 相关练习题
- 文档对象模型(DOM)中的结点属性
在文档对象模型中,每个结点都是一个对象.DOM结点有三个重要的属性:nodeName .nodeValue和nodeType,分别表示结点名称.结点的值和结点的类型 一.nodeName,结点名称,只 ...
- SQL中常用模糊查询的四种匹配模式&&正则表达式
执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...
- 对象-3.py
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #cbcbcb } p.p2 { margin: 0.0px 0 ...
- 1.Dotnet Core安装
DtnetCore1.0.1的安装包我以上传至百度网盘,里面有安装教程. http://pan.baidu.com/s/1c2iLNNE 如果安装不上,请留言,我会在第一时间回复你. 不需要挂VPN.
- Usage: AddDimensionedImage imageFile outputFile eclipse 运行程序出错
关于这个在eclipse中运行java程序的错,首先确认你的jdk,jre是否完整,并且与你的eclipse的位数相同,当然我相信这个错误大家应该都会去检查到. 第二个关于addDimensioned ...
- 一个简单的物料防错DEMO
前言 快2个月没写过博客了,就算是记流水账似的文章都没时间写,主要是太忙了:太多的bug要修复.太多由于bug引起的异常问题要解决.还有新的项目要开发,不忙怎么行呢?最近利用业余时间在鼓捣一个PDA的 ...
- js设计模式总结-策略模式
策略模式 要解决的问题 当解决一个问题有多种方法时,选择使用哪种方法时就少不了要用大量的if语句进行判断,如果将这些方法的实现和判断语句放在一起实现就会产生问题, 比如增加一种的新的方法时,就不得不再 ...