zoukankan      html  css  js  c++  java
  • 关于CATransform3D矩阵变换的简单解析

    关于CATransform3D矩阵变换的简单解析

    效果图:

    我能能够用上的CATransform3D其实很简单,并不复杂.

    CATransform3D有着4种东西我们可以设置.

    1. 透视效果(由m34的值决定)

    2. 位移变换(主要是x,y方向)

    3. 缩放变换

    4. 空间旋转

    源码:

    //
    //  RootViewController.m
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "CATransform3DOperation.h"
    #import "YXGCD.h"
    
    @interface RootViewController ()
    
    @property (nonatomic, strong) GCDTimer *timer;
    
    @end
    
    // 将角度转换为弧度
    #define DEGREES_TO_RADIANS(d)  ((d) * M_PI / 180.f)
    
    @implementation RootViewController
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor blackColor];
        
        // 给Layer一个图片内容
        UIImage *image = [UIImage imageNamed:@"4"];
        CALayer *layer = [CALayer layer];
        layer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
        layer.position = self.view.center;
        layer.borderWidth = 4.f;
        layer.borderColor = [UIColor redColor].CGColor;
        layer.contents = (__bridge id)image.CGImage;
        [self.view.layer addSublayer:layer];
        
        // 6s后执行操作
        [[GCDQueue mainQueue] execute:^{
            
            // 初始化3D变换,获取默认值
            CATransform3D perspectiveTransform = CATransform3DIdentity;
            
            // 透视
            perspectiveTransform.m34 = -1.0/500.0;
            
            // 位移
            perspectiveTransform = CATransform3DTranslate(perspectiveTransform, 30, -35, 0);
            
            // 空间旋转
            perspectiveTransform = CATransform3DRotate(perspectiveTransform,
                                                       DEGREES_TO_RADIANS(30), .75, 1, -0.5);
            
            // 缩放变换
            perspectiveTransform = CATransform3DScale(perspectiveTransform, 0.75, 0.75, 0.75);
            
            layer.transform = perspectiveTransform;
            layer.speed = 0.5;
            
        } afterDelay:NSEC_PER_SEC * 6];
    
        // 9s后执行操作
        [[GCDQueue mainQueue] execute:^{
            
            // 初始化3D变换,获取默认值
            CATransform3D perspectiveTransform = CATransform3DIdentity;
            
            layer.transform = perspectiveTransform;
            layer.speed = 0.5;
            
        } afterDelay:NSEC_PER_SEC * 9];
    }
    
    
    @end

    核心代码:

    http://stackoverflow.com/questions/3881446/meaning-of-m34-of-catransform3d

  • 相关阅读:
    【python刷题】前缀和
    【python刷题】数组链表去重
    【python刷题】滑动窗口法
    【python刷题】二分查找
    【python刷题】广度优先搜索(BFS)
    【python刷题】回溯算法(深度优先搜索DFS)
    机器学习十讲-第三讲分类
    数学知识-质数&约数
    树与图的DFS与BFS
    桥梁保护与监控-开发进度(二)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3765894.html
Copyright © 2011-2022 走看看