• (四期)简单添加TableViewCell的3D动画效果


    -(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];
    }
  • 相关阅读:
    LINQ中selectManay操作符(五)
    LINQ中select操作符(四)
    高效并发进阶-白银
    JVM回收算法
    一个类是怎么被JVM执行的
    一纸理解JVM
    单例模式
    深入理解Spring AOP思想
    深入理解Spring IOC工作原理
    HashMap扩容全过程
  • 原文地址:https://www.cnblogs.com/hanyutong/p/4949524.html
Copyright © 2020-2023  润新知