iOS中UIView 的旋转与缩放以及同时应用两种效果

  1. UIView的缩放
    CGAffineTransform 提供了两个方法用于缩放,分别是CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)和CGAffineTransform CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)。
    1.1 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
    这个方法可以方便的对view的长和宽进行缩放,不改变view的中心点。注意!中心点不变指的是物理位置不变,不是坐标,因为坐标系此时已经发生改变。
    例如:对view进行0.5等比缩放:
    view.transform = CGAffineTransformMakeScale(0.5, 0.5);
    1.2 CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)
    这个方法同样是view的长和宽进行缩放,效果类似CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)不同的是这个方法可以叠加其他CGAffineTransform效果(比如旋转)
    例如:对view进行0.5等比缩放:
    view.transform = CGAffineTransformScale(view.transform, 0.5, 0.5);
  2. UIView的旋转
    CGAffineTransform 提供了两个方法用于旋转,分别是CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)和CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)。
    2.1 CGAffineTransformMakeRotation(CGFloat angle)
    这个方法可以方便的对view进行旋转,不改变view的中心点。注意!中心点不变指的是物理位置不变,不是坐标,因为坐标系此时已经发生改变。
    例如:对view进行45度旋转:
    view.transform = CGAffineTransformMakeRotation (M_PI_2);
    2.2 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
    这个方法同样是对view进行旋转,效果类似 CGAffineTransformMakeRotation(CGFloat angle)不同的是这个方法可以叠加其他CGAffineTransform效果(比如缩放)
    例如:对view进行45度旋转:
    view.transform = CGAffineTransformRotate (view.transform, M_PI_2);
    我们考虑这样一种需求:对UIView同时进行缩放和旋转(以0.5倍等比缩放和45度旋转为例)。在我自己的实践中,最开始的想法很简单,CGAffineTransformMakeScale(0.5, 0.5)进行缩放,接着使用CGAffineTransformMakeRotation (M_PI_2)进行旋转,问题马上出来了,view并不会在缩放的同时进行旋转,而是只应用了最后的旋转效果。一番研究之后,找到了可行的解决方案,即:
    分别使用CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)和CGAffineTransform CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)替换上面的两个方法,具体代码如下:
    view.transform = CGAffineTransformScale(view.transform, 0.5, 0.5);
    view.transform = CGAffineTransformRotate (view.transform, M_PI_2);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容