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移动效果]的更多相关文章

  1. [MISSAJJ原创]cell内 通过SDWebImage自定义创建动态菊花加载指示器

    最后更新已经放到了github上了 MISSAJJ自己写的一个基于SDWebImage自定义的管理网络图片加载的工具类(普通图片加载,渐现Alpha图片加载,菊花Indicator动画加载) 经常在项 ...

  2. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数001·3D函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“proce ...

  3. 仿58同城UITableViewCell动画

    之前看58同城APP有一个页面中Cell依次从右向左移动,今天试着做了下. 在做的过程中也遇到了几个小的问题,也算是注意点吧. 1.Cell出现时每个Cell的动画时间一样,导致没有依次移动的效果. ...

  4. 【原创】梵高油画用深度卷积神经网络迭代10万次是什么效果? A neural style of convolutional neural networks

    作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作 ...

  5. UITableViewCell 高度计算从混沌初始到天地交泰

    [原创]UITableViewCell 高度计算从混沌初始到天地交泰 本文主要基予iOS UITableViewCell 高度自适应计算问题展开陈述,废话少说直入正题: UITableView控件可能 ...

  6. iOS UITableViewCell UITableVIewController 纯代码开发

    iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...

  7. 【ios开发】UITableViewCell的重用

    移动开发需要解决的一个问题就是资源稀缺的问题.多数情况下是内存问题. 虽然现在的手机都号称大内存,高配置.但是移动app所占用的资源也在跟着不断膨胀, 也是造成内存不足的主要原因. 在前面的例子中,还 ...

  8. iOS视图弹出、平移、旋转、翻转、剪切等变换效果实现

    效果图: 1.定义属性 @property (nonatomic, strong) UIView *transformView;//发生变换的试图 @property (nonatomic, stro ...

  9. UITableView UITableViewCell

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

随机推荐

  1. 20161013001 DataGridView 数据转 DataTable

    DataTable dt2 =  GetDgvToTable(Form_CY_ProjectRequirements_D);    MessageBox.Show( dt2.Rows.Count.To ...

  2. MPI Maelstrom - POJ1502最短路

    Time Limit: 1000MS Memory Limit: 10000K Description BIT has recently taken delivery of their new sup ...

  3. [TCPIP] DNS Note

    TCPIP DNS  域名系统 DNS 是一个应用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 对DNS的访问是通过一个地址解析器来完成的,在Un ...

  4. wcscpy_s与wcsncpy

    今天运行以下代码时一直出错 void Foo(const wchar_t* lpch, int len) { ... wchar_t *str = ]; wcscpy_s(str, len, lpch ...

  5. webDriver 执行杀死浏览器进程方法

    /**     * 执行dos命令     * @param command     */    public static void command(String command) {       ...

  6. Oracle(创建序列)

    概念: 所谓序列,在oracle中就是一个对象,这个对象用来提供一个有序的数据列,这个有序的数据列的值都不重复. 1.序列可以自动生成唯一值 2.是一个可以被共享的对象 3.典型的用来生成主键值的一个 ...

  7. 1006. Sign In and Sign Out (25)

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  8. Linux系统移植(1) ------搭建交叉编译环境

    本人的开发环境是ubuntu12.05的64版本,运行在11.00的虚拟机上.首先说明为什么需要搭建交叉编译环境.我们知道,我们的开发一般在PC机上,是基于X86架构的,而我们的开发板却是基于ARM架 ...

  9. C语言程序设计进阶 第1周编程题

    第1周编程题 查看帮助 返回 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数 ...

  10. 装逼名词 bottom-half,软中断,preemptive选项

    bottom-half http://bbs.csdn.net/topics/60226240 在中断,异常和系统调用里看Linux中断服务一般都是在关闭中断的情况下执行的,以避免嵌套而是控制复杂化L ...