CGAffineTransform的疑惑探索

看到YYKit大神写的这几行代码,有些疑惑,特此记。

/// Get the transform rotation.
/// @return the rotation in radians [-PI,PI] ([-180°,180°])
static inline CGFloat CGAffineTransformGetRotation(CGAffineTransform transform) {
    return atan2(transform.b, transform.a);
}

/// Get the transform's scale.x
static inline CGFloat CGAffineTransformGetScaleX(CGAffineTransform transform) {
    return  sqrt(transform.a * transform.a + transform.c * transform.c);
}

/// Get the transform's scale.y
static inline CGFloat CGAffineTransformGetScaleY(CGAffineTransform transform) {
    return sqrt(transform.b * transform.b + transform.d * transform.d);
}

/// Get the transform's translate.x
static inline CGFloat CGAffineTransformGetTranslateX(CGAffineTransform transform) {
    return transform.tx;
}

/// Get the transform's translate.y
static inline CGFloat CGAffineTransformGetTranslateY(CGAffineTransform transform) {
    return transform.ty;
}

这是YYKit大神些的关于CGAffineTransform的一些获取比例和平移量的方法。对于其使用到的transform参数甚是不解,学习下。

作用:transform,是定义在二维空间上完成View的变换的属性。

初始化方法:

 CGAffineTransform transform  = CGAffineTransformMake(CGFloat a,CGFloat b,

CGFloat c,CGFloa td,CGFloat tx,CGFloat ty)

transform参数结构:

这里写图片描述

根据该结构可以得到一个3x3的矩阵表达式:

这里写图片描述

矩阵算法公式:

这里写图片描述

根据计算公式就比较容易理解CGAffineTransform中的各个参数的意思了,对YYKit大神的以上方法的依据也有了认知。

结论:

1a,d 会直接影响视图的缩放
2、c会影响视图宽度的改变,b会影响视图高度的改变
3、tx会影响在x方向的偏移量, ty会影响在y方向的偏移量 

感谢燃烧的大叔的博文提供的资源和结论为我解决了不少疑惑:

燃烧的大叔的结论:

1、x按照a值进行了比例缩放,y按照d的值进行比列缩放,最重要的是缩放的过程中View的point(中心点)是不会改变的。

接着对b,c,t.x ,ty,进行深度研究发现:

2、x会跟着c的值进行拉伸(View的宽度是跟着改变),y会跟着b的值进行拉伸(View的高度跟着改变),要注意到的是c和b的值改变不会影响到View的point(center中心点)的改变。这是个很有意思的两个参数。

3、x会跟着t.x进行x做表平移,y会跟着t.y进行平移。这里的point(center)是跟着变换的。

博文连接: http://www.jianshu.com/p/6c09d138b31d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值