Transform变换

http://blog.csdn.net/victormokai/article/details/42395551

我们知道在UIKit开发中UIView有一个transform属性用于控件的形变,其实在绘图中我们也经常用到图形形变,这个时候可以借助图形上下文的形变方法来完成。在弄清形变之前我们要清楚图形上下文的坐标原点,因为无论是位移还是旋转都是相对于坐标原点进行的。其实Quartz2D的坐标系同UIKit并不一样,它的坐标原点在屏幕左下方,但是为了统一编程方式,UIKit对其进行了转换,坐标原点统一在屏幕左上角。注意在设置图形上下文形变之前一定要注意保存上下文的初始状态,在使用完之后进行恢复。否则在处理多个图形形变的时候很容易弄不清楚到底是基于怎样的坐标系进行绘图,容易找不到原点(做过html5canvas绘图的朋友对这一点应该很熟悉,在html5中绘图也经常进行状态保存和恢复)

 

UIView的transform

一个CGAffineTransform类型的数据,默认值为CGAffineTransformIdentity

UIView的transform指示其在屏幕上的呈现方式,与Quartz的变换原点为左上角或左下角不同,UIView变换的原点为centerlayeranchorPoint

CGAffineTransformMakeXXX 基于屏幕原点进行变换

CGAffineTransformXXX  基于当前控件原点进行变换

CGAffineTransformInvert    返回Transformation的反向

CGAffineTransformConcat    合并两个Transformation

 

检测一个Transformation 

CGAffineTransformIsIdentity //检测一个Transformation是不是恒等变换,也就是说不变

CGAffineTransformEqualToTransform   //检测两个Transformation是否相等。

 

1、CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle);//M_PI 逆时钟180、M_PI_2顺时90

在这里可以看到参数并不是一个角度,但是它是把参数作为一个弧度,然后把弧度再转换为角度来处理,其结果就可能是将一个图片视图旋转了多少度。

2、CGAffineTransform CGAffineTransformMakeScale (CGFloat sx, CGFloat sy);

缩放比例,假设是一个图片视图引用了这个变换,那么图片的宽度就会变为  width*sx  ,对应高度变为  hight* sy。

3、CGAffineTransform CGAffineTransformMakeTranslation (CGFloat tx,CGFloat ty);

  这个就比较好理解了,假设是一个视图,那么它的起始位置 x 会加上tx , y 会加上 ty

 

CALayertransform属性

CALayer的transform属性是是个CATransform3D类型的数据。同UIView的transform相同,CATransform3D也是相对于中心点的变换矩阵。


    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值