美文网首页
Transform&CATransform3D

Transform&CATransform3D

作者: LiYaoPeng | 来源:发表于2017-02-04 23:40 被阅读0次

    View的Transform

    修改transform属性,可以实现控件的 平移/缩放和旋转

    常用的函数:

    CGAffineTransformMakeTranslation  只能平移一次
     CGAffineTransformTranslate        可以连续平移
     tx表示水平方向的移动范围,大于0表示向右移,小于0表示向左移动
     ty表示垂直方向的移动范围,大于0表示向上移,小于0表示向下移动
     
     CGAffineTransformMakeScale        只能够缩放一次
     CGAffineTransformScale            可以连续缩放
     sx表示水平方向的缩放,大于1表示放大,小于1表示缩小
     sy表示垂直方向的缩放,大于1表示放大,小于1表示缩小
     
     
     CGAffineTransformMakeRotation     只能旋转一次
     CGAffineTransformMakeRotate       可以连续旋转
     angle表示旋转的度数(弧度).大于0表示是顺时针旋转,小于0表示是逆时针旋转.
     
     CGAffineTransformIdentity         单位矩阵,把所有transform的形变复位.
     
     注意:
        However, if the transform property contains a non-identity transform, the value of the frame property is undefined and should not be modified. In that case, you can reposition the view using the center property and adjust the size using the bounds property instead
             如果transform的值不是CGAffineTransformIdentity(也就是说控件的transform属性被修改了),就不要再修改控件的frame属性了!此时,如果再想要修改控件的位置,可以修改center属性;如果再想修改控件的大小,可以修改bounds属性.
    

    CATransform3D

    主要用于layer的图形变换得以达到特殊的效果


    CATransform3DMakeTranslation

    **CATransform3DMakeTranslation **
    官方文档:
    Returns a transform that translates by '(tx, ty, tz)'. t' = [1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1].
    
    CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz)。
    做一个解释,对于初学者来说,可能没有看明白是什么意思。我详细说下
    对于CATransform3D来说,它是一个4x4 CGFloat的矩阵。
    而上面给的值:[1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1].
    给竖起来后。就发现:
    1    0    0    0
    0    1    0    0
    0    0    1    0
    tx  ty   tz   1
    竖起来看就很明显了。
    CATransform3D 又是一个结构。他有自己的一个公式,可以进行套用。
    
     
    struct CATransform3D
    {
    CGFloat     m11(x缩放),    m12(y切变),      m13(旋转),     m14();
    
    CGFloat     m21(x切变),    m22(y缩放),      m23(),             m24();
    
    CGFloat     m31(旋转),      m32( ),               m33(),              m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。正直/负值都有意义);
    
    CGFloat     m41(x平移),     m42(y平移),     m43(z平移),     m44();
    };
    

    CATransform3DMakeTranslation

    CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz)
    的参数意思就是 
    tx::x平移。  ty:y平移。  tz:z平移
    

    常用函数:
    CATransform3DMakeTranslation

    CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz)
    tx:X轴偏移位置,往下为正数。
    ty:Y轴偏移位置,往右为正数。
    tz:Z轴偏移位置,往外为正数。
    对于tz来说,值越大,那么图层就越往外(接近屏幕),值越小,图层越往里(屏幕里)。
    

    CATransform3DTranslate

    CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);
    t:就是上一个函数。其他的都一样。
    就可以理解为:函数的叠加,效果的叠加。
    

    CATransform3DMakeScale

    CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
    sx:X轴缩放,代表一个缩放比例,一般都是 0 --- 1 之间的数字。
    sy:Y轴缩放。
    sz:整体比例变换时,也就是m11(sx)== m22(sy)时,若m33(sz)>1,图形整体缩小,若0<1,图形整体放大,若m33(sz)<0,发生关于原点的对称等比变换。
    

    CATransform3DScale

    CATransform3D CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz)
     
    t:就是上一个函数。其他的都一样。
    就可以理解为:函数的叠加,效果的叠加。
    

    CATransform3DMakeRotation

    CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
    
    旋转效果。
    angle:旋转的弧度,所以要把角度转换成弧度:角度 * M_PI / 180。
    x:向X轴方向旋转。值范围-1 --- 1之间
    y:向Y轴方向旋转。值范围-1 --- 1之间
    z:向Z轴方向旋转。值范围-1 --- 1之间
    

    CATransform3DRotate

    CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
     
    t:就是上一个函数。其他的都一样。
    就可以理解为:函数的叠加,效果的叠加。
    

    CATransform3DGetAffineTransform

    CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t);
    bool CATransform3DIsAffine (CATransform3D t);
    仿射效果。
    
    就是把一个 CATransform3D 对象转换成一个 CGAffineTransform 对象。
    也就是把 CATransform3D 矩阵 转换成 CGAffineTransform 矩阵
    

    比较一个变换矩阵是否是单位矩阵,或者两个矩阵是否相等

    bool CATransform3DIsIdentity (CATransform3D t);
    bool CATransform3DEqualToTransform (CATransform3D a, CATransform3D b);
    

    参考资料:http://justsee.iteye.com/blog/2335660

    相关文章

      网友评论

          本文标题:Transform&CATransform3D

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