博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(四期)简单添加TableViewCell的3D动画效果
阅读量:4972 次
发布时间:2019-06-12

本文共 2384 字,大约阅读时间需要 7 分钟。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
 
//参考资料:
 
//1、配置CATransform3D的内容
 
    CATransform3D transform;
 
    //该CATransform3DMakeRotation函数创建了一个转变,将在三维轴坐标系以任意弧度旋转层。
 
    transform = CATransform3DMakeRotation( (90.0*M_PI)/180, 0.0, 0.7, 0.4);
    //
    //transform = CATransform3DMakeRotation(0.78, 0.0, 0.7, 0.4);
    //
    //transform = CATransform3DMakeRotation(radians(45.0), 0.0, 1.0, 0.0);
    /*
     参数:第一个参数是旋转的角度,对象按照你设定的角度的最短距离去旋转,后面三个参数分别是xyz(-1~1之间的值)代表的一个向量值
 
     a、
 
     //沿Y轴旋转
 
     transform = CATransform3DMakeRotation( (90.0*M_PI)/180, 0.0, 1.0, 0.0);
 
     //沿X轴旋转
 
     transform = CATransform3DMakeRotation( (90.0*M_PI)/180, 1.0, 0.0, 0.0);
 
     //沿Z轴旋转
 
     transform = CATransform3DMakeRotation( (90.0*M_PI)/180, 0.0, 0.0, 1.0);
 
     b、
 
     0.78,用在前面的例子,是由角度值经计算转化为弧度值。要把角度值转化为弧度值,可以使用一个简单的公式Mπ/180 。
 
     例如, 45π/180 = 45 ( 3.1415 ) / 180 = 0.7853 。
 
     double radians(float degrees) {
 
     return ( degrees * 3.14159265 ) / 180.0;
 
     }
 
     //当你创建一个转换的时候,你将要调用这个方法:
 
     transform = CATransform3DMakeRotation(radians(45.0), 0.0, 1.0, 0.0);
 
     */
 
    transform.m34 = 1.0/ -600;
 
    /*
 
     transform的结构如下:
 
     struct CATransform3D
 
     {
 
     相关资料:
 
     CGFloat m11, m12, m13, m14;
 
     CGFloat m21, m22, m23, m24;
 
     CGFloat m31, m32, m33, m34;
 
     CGFloat m41, m42, m43, m44;
 
     };
 
     简述:
 
     首先要实现view(layer)的透视效果(就是近大远小),是通过设置m34的:
 
     CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
 
     rotationAndPerspectiveTransform.m34 = 1.0 / -500;
 
     m34负责z轴方向的translation(移动),m34= -1/D,  默认值是0,也就是说D无穷大,这意味layer in projection plane(投射面)和layer in world coordinate重合了。
 
     D越小透视效果越明显。
 
     所谓的D,是eye(观察者)到投射面的距离。
 
     */
 
 
// 2. 定义cell的初始状态
 
 
    /*影子的颜色。默认为不透明的黑色。颜色创建从目前的模式是不受支持的。可以做成动画。*/
 
    cell.layer.shadowColor = [[UIColor blackColor]CGColor];
 
    /* 影子偏移量。默认为(0,-3)。可以做成动画。 */
 
    cell.layer.shadowOffset = CGSizeMake(10, 10);
 
    cell.alpha = 0;
 
    cell.layer.transform = transform;
 
    /*定义层的边界矩形的锚点,点上归一化层坐标- '(0,0)的左下角边界矩形”(1,1)”是右上角。默认为'(0.5,0.5)”,即边界矩形的中心,可以做成动画。*/
 
    cell.layer.anchorPoint = CGPointMake(0, 0.5);
 
 
 
// 3. 定义cell的最终状态,并提交动画
 
 
    [UIView beginAnimations:@"transform" context:NULL];
 
    [UIView setAnimationDuration:0.5];//慢动作
 
    cell.layer.transform = CATransform3DIdentity;/* Returns true if 't' is the identity transform. 还原的意思吧?*/
 
    cell.alpha = 1;
 
    cell.layer.shadowOffset = CGSizeMake(0, 0);
 
    cell.frame = CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height);
 
    [UIView commitAnimations];
}

转载于:https://www.cnblogs.com/hanyutong/p/4949524.html

你可能感兴趣的文章
对Haskell这门语言的基本认识
查看>>
mysql 安装补充
查看>>
大学里如何学习 ?
查看>>
Oracle命令类别
查看>>
js面试题:关于数组去重的四种方法总结
查看>>
Linux内核分析(三)----初识linux内存管理子系统
查看>>
stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
查看>>
vue中提示$index is not defined
查看>>
Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
查看>>
css选择器
查看>>
看懂下面C++代码才说你理解了C++多态虚函数!
查看>>
ASP.NET上传下载文件
查看>>
Galaxy Nexus 全屏显示-隐藏Navigation Bar
查看>>
Spring中使用Velocity模板
查看>>
上周热点回顾(8.18-8.24)
查看>>
Feature toggle
查看>>
day02
查看>>
gvim 配置Pydiction
查看>>
Linux安装指定mysql版本
查看>>
分布式锁的三种实现方式
查看>>