[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 ...
随机推荐
- 简单讲解MVC(视图/模型/控制器)
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...
- spring mybatis 事务配置及使用
转自:http://kinglixing.blog.51cto.com/3421535/723870
- php请求返回GeoJSON格式的数据
<?php /* * Following code will list all the products */ // array for JSON response $response = ar ...
- JDBC三层架构
三层框架: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 原理:1:数据访问层:主要是对原始 ...
- [OC]宏与const 的使用
Tip: OS日常工作之常用宏定义大全 (摘录文档地址,感觉还不错,例子简单易懂) extern字符串常量,宏定义字符串常量,怎么选? Define与Const专题 extern字符串常量,宏定义字符 ...
- Java类的加载
1.类的加载步骤 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三步来实现对这个类的初始化 加载:将class文件读入内存,并为之创建一个Class对象,任何类被使用 ...
- 人工神经网络ANNs
参考: 1. Stanford前向传播神经网络Wiki 2. Stanford后向传播Wiki 3. 神经网络CSDN blog 4. 感知器 5. 线性规划 6. Logistic回归模型 内容: ...
- 如何为数据源向导填加一种自定义的数据源类型(win示例)
https://www.devexpress.com/Support/Center/Example/Details/T310160
- Window 注册程序关联后缀文件,双击运行
一般来说,很多软件都会有自定义后缀的文件,比如.cpp..doc等,那么如果我们想把这些后缀与我们的软件关联起来,如何做呢 #pragma once #include "StdAfx.h&q ...
- maven命令参考简要
命令参考简要说明 mvn archetype:generate — 创建生成Tiny骨架工程 参数名 说明 groupId 用户项目的包目录,用户需要根据实际情况设置.比如com.abc artifa ...