美文网首页
【CoreGraphics】CGAffineTransform

【CoreGraphics】CGAffineTransform

作者: 居然是村长 | 来源:发表于2016-03-30 23:18 被阅读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

    相关文章

      网友评论

          本文标题:【CoreGraphics】CGAffineTransform

          本文链接:https://www.haomeiwen.com/subject/orrelttx.html