iOS transform(基础)

主要分3个部分说明。 1.基础及矩阵概念 2.2D仿射 3.3D仿射

1.基础

transform在矩阵变换的层面上改变视图的显示效果,完成旋转,变形,平移等操作。在它被修改的同时,视图的frame也会被真实的改变。

UIView中的transform为CGAffineTransform类型。

struct CGAffineTransform {
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};

CALayer中的transform为CATransform3D类型,而CALayer对应于UIView的transform属性叫做affineTransform

struct CATransform3D
{
  CGFloat m11, m12, m13, m14;
  CGFloat m21, m22, m23, m24;
  CGFloat m31, m32, m33, m34;
  CGFloat m41, m42, m43, m44;
};

2.矩阵概念

矩阵概念:一个m×n矩阵是一个由m行(row)n列(column)元素排列成的矩形阵列。 也就是这个样子

//也是仿射变换基础矩阵,下面tip讲解为什么是这个样子。
A = [a  b  0]
    [c  d  0]
    [tx ty 1]

矩阵可以做加减,乘除。

加减:大小相同(行数列数都相同)的矩阵之间可以相互加减,具体是对每个位置上的元素做加减法。(比较简单不演示了)。 乘除:当且仅当第一个矩阵的列数等于第二个矩阵的行数,才可以做乘除。(例如下面A矩阵2列,B矩阵2行)。

//矩阵乘除例子
矩阵A = 
[1  1]
[2  0]

矩阵B = 
[0  2  3]
[1  1  2]

计算过程:
矩阵C = A * B =    
[(1 * 0 + 1 * 1) (1 * 2 + 1 * 1) (1 * 3 + 1 * 2)] 
[(2 * 0 + 0 * 1) (2 * 2 + 0 * 1) (2 * 3 + 0 * 2)]   
矩阵C =
[1 3 5]
[0 4 6]

矩阵乘除的计算规则: 1.不符合交换律(A和B是矩阵,AB不一定等于BA) 2.当矩阵A的列数等于矩阵B的行数是,才可以计算 3.计算的结果矩阵C的行数等于A的行数,列数等于B的列数(如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵 ) 4.结果矩阵C的第 i 行第 j 列的元素Cij 等于矩阵A的第 i 行的元素与矩阵B的第 j 列对应元素乘积之和

3.Tip

1.为什么仿射变换基础矩阵的第三列为(0,0,1)? 当且仅当第一个矩阵的列数等于第二个矩阵的行数,才可以做乘除。并且为了不影响计算结果所以使用(0,0,1)。 2.图层的旋转,平移,放缩是怎么通过矩阵变化的? 当对图层应用变换矩阵,图层矩形内的每一个点都被相应地做变换,从而形成一个新的四边形的形状。

参考 iOS开发经验(6)-Transform

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS122-移动混合开发研究院

Masonry -- 使用纯代码进行iOS应用的autolayout自适应布局

简介 简化iOS应用使用纯代码机型自适应布局的工作,使用一种简洁高效的语法替代NSLayoutConstraints. 最新示例: 点击下载 项目简议: 如果再...

2345
来自专栏用户2442861的专栏

matlab使用

x=[7.0  10.5  13.0  17.5  34.0  40.5  44.5  48.0  56.0  61.0  68.5  76.5  80.5...

782
来自专栏烂笔头

常用样本相似性和距离度量方法

目录[-] 数据挖掘中经常需要度量样本的相似度或距离,来评价样本间的相似性。特征数据不同,度量方法也不相同。 欧式距离 欧式距离(Euclidean ...

7734
来自专栏非典型技术宅

Masonry的层层进阶1 基础写法:2 进阶写法3 自动装箱的写法4 Masonry的练习4.1 设置居中5. 更新及重建约束6. Masonry的两个宏

1162
来自专栏用户2442861的专栏

相似图片检测:感知哈希算法之dHash的Python实现

某些情况下,我们需要检测图片之间的相似性,进行我们需要的处理:删除同一张图片、标记盗版等。 如何判断是同一张图片呢?最简单的方法是使用加密哈希(例如MD5, ...

2051
来自专栏我爱编程

Matplotlib入门

qiangbo.space/2018-04-06/matplotlib_l1/ 入门代码示例 import matplotlib.pyplot as plt ...

3779
来自专栏数据结构与算法

面积问题最简做法

1、编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“*”围住...

3014
来自专栏落影的专栏

Metal视频处理——绿幕视频合成

Metal入门教程总结 Metal图像处理——直方图均衡化 本文介绍如何用Metal把一个带绿幕的视频和一个普通视频进行合并。

5673
来自专栏生信小驿站

机器学习实战⑴之线性回归预测房价机器学习实战

一般来说,一个学习问题通常会考虑一系列 n 个 样本 数据,然后尝试预测未知数据的属性。 如果每个样本是 多个属性的数据,比如说是一个多维记录),就说它有许多“...

1172
来自专栏iOSer成长记录

OpenGL ES(四) 变换

1372

扫码关注云+社区