【CoreGraphics】CGAffineTransform

2016-03-30  本文已影响74人  居然是村长

简单知识

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

矩阵乘法

CGAffineTransform 结构体,对应上面矩阵。(至于0和1,反正计算结果永远是1,有什么用)

x' = x*a + y*c + tx;
y' = x*b + y*d + ty;
1 = x*0 + y*0 + 1;

a:x轴缩放
d:y轴缩放
tx:x轴偏移
ty:y轴偏移

b:默认0:正:(0,0)与(x,y)上下拉扯。负:(x,0)与(0,y)上下拉扯
c:默认0:正:(0,0)与(x,y)左右拉扯 。 负:(x,0)与(0,y)左右拉扯

bc 公式好复杂,阿西吧。

原始矩阵 CGAffineTransformIdentity

创建 CGAffineTransform

        self.testView.transform = CGAffineTransformMakeScale(0.5, 1.5);// 倍率
        self.testView.transform = CGAffineTransformMakeRotation(M_PI/2);// 正顺,M_PI = 180 中心旋转而已
        self.testView.transform = CGAffineTransformMakeTranslation(100, 100);// 偏移 xy

        self.testView.transform = CGAffineTransformMake(1, 1, 0.5, -1, 0, 0);// 效果拔群!旋转效果算法赶紧研究!

        CGAffineTransform standTransform = CGAffineTransformIdentity;// 标准

对CGAffineTransform 2次调整

        self.testView.transform = CGAffineTransformScale(self.testView.transform, 0.9, 1.1);
        self.testView.transform = CGAffineTransformRotate(self.testView.transform, M_PI/5);
        
        self.testView.transform = CGAffineTransformTranslate(self.testView.transform, 10, 20);
        
        
        CGAffineTransformInvert(transform);// 颠倒
        CGAffineTransformConcat(transform1, transform2);// 合并

获取新的属性 point size rect

        CGPoint newPoint = CGPointApplyAffineTransform(CGPointMake(100, 100), transform);
        CGSize newSize = CGSizeApplyAffineTransform(CGSizeMake(100, 100), transform);
        CGRect newRect = CGRectApplyAffineTransform(CGRectMake(100, 100, 100, 100), transform);
        

判断

        CGAffineTransformInvert(transform);// 是否 标准
        CGAffineTransformEqualToTransform(transform1, transform2);// 是否一致
        

其他 CGAffineTransformMake(a, b, c, d, tx, ty); 这个变化十分多样,远比系统写好的变化奇葩。

1

上一篇下一篇

猜你喜欢

热点阅读