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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

关于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

目录
相关文章
|
数据可视化
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
19704 2
|
4月前
|
移动开发 前端开发 JavaScript
Twaver-HTML5基础学习(15)形状连线(ShapeLink)四种类型(直线、正交、二次贝塞尔、三次贝塞尔)
本文介绍了Twaver HTML5中的形状连线(ShapeLink),包括如何使用它以及如何添加控制点。文章详细解释了ShapeLink支持的四种连线类型:直线(lineto)、正交(orthogonalto)、二次贝塞尔曲线(quadto)和三次贝塞尔曲线(cubicto),并通过示例代码展示了如何在React组件中创建和配置ShapeLink。
68 3
|
7月前
|
计算机视觉
图像处理之给定任意四点不规则放缩
图像处理之给定任意四点不规则放缩
37 3
|
7月前
|
Perl
6.Z 字型变换
6.Z 字型变换
|
8月前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
60 1
|
8月前
|
算法 计算机视觉 芯片
[Halcon&定位] 二维仿射变换原理与算子解析
[Halcon&定位] 二维仿射变换原理与算子解析
394 0
|
Java
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
296 0
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
C++ 绘制圣诞树 (找规律 多层循环)
C++ 绘制圣诞树 (找规律 多层循环)
798 0
ENVI_IDL:如何对影像进行各种方式的上下左右的颠倒或者翻转.
ENVI_IDL:如何对影像进行各种方式的上下左右的颠倒或者翻转.
399 0
射线法——判断一个点是否在多边形内部(适用于凸多边形和凹多边形)【关键原理解释+文字伪代码】
射线法——判断一个点是否在多边形内部(适用于凸多边形和凹多边形)【关键原理解释+文字伪代码】
750 0