简单知识
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 公式好复杂,阿西吧。
创建 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