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. [转]CocoaPods安装和使用教程

    转载地址:http://code4app.com/article/cocoapods-install-usage 目录 CocoaPods是什么? 如何下载和安装CocoaPods? 如何使用Coco ...

  2. android xml中的xliff属性

    <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff=" ...

  3. Android的学习第六章(布局一TableLayout)

    今天我们来简单的说一下Android不居中的TableLayout布局(表格布局) 表格布局的意思就是将我们的布局看做为一个表格,主要用于对控件进行整齐排列 我们看一个简单的案例 <TableL ...

  4. Node.js怎么处理数据库中日期类型

    问题描述:在数据库里存储时间的时候明明显示的是类如2016-12-22的形式,读取出来后却变成了大概是这样的:Fri May 17 2016 14:12:33 GMT+0800 (中国标准时间) 处理 ...

  5. CentOS 7 下,如何设置DNS服务器

    在CentOS 7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.和CentOS 6下的设置DNS方法不同,有几种方式: 1.使用全新的命令行工具 ...

  6. HTML相关问题

    1.XHTML和HTML有什么区别HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:XHTML 元素必须被正确地嵌套.XHTML 元素必须被关闭.标签名必须用小 ...

  7. php : 基础(1)

    php基本语法形式 1.php的标记符 有以下形式: 形式1(推荐): <?php 这里要写符合php语法的语句 ?> 形式2: <script language="php ...

  8. [转载]自己编写 php 在线问卷调查程序

        <html> <head> <title>问卷调查</title> <meta http-equiv="Content-Type ...

  9. road习题(二)

    答案:[C] 解析:2 8 原则,考虑的是最高峰,所以安装12小时算 ,80%的 PV 也就是访问都是在 早上6点到下午6点这12个小时里,晚上6点到早上6点的PV总量是40000 ,服务器台数为3, ...

  10. android线程登录

    主入口代码: package com.tp.soft.app; import java.io.IOException; import java.util.HashMap; import java.ut ...