UIVIEW 的旋转与缩放以及同时应用两种效果(一)

对于UIView的缩放,最简单的方法可以是修改view的frame,这里不做讨论。

我们来讨论一下 CGAffineTransform在UIView的缩放与旋转上的应用。以下假设view为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等比缩放:

 

1.2 CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)
这个方法同样是view的长和宽进行缩放,效果类似CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)不同的是这个方法可以叠加其他CGAffineTransform效果(比如旋转)
例如:对view进行0.5等比缩放:

 

2. UIView的旋转
CGAffineTransform 提供了两个方法用于旋转,分别是CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)

2.1 CGAffineTransformMakeRotation(CGFloat angle)
这个方法可以方便的对view进行旋转,不改变view的中心点。注意!中心点不变指的是物理位置不变,不是坐标,因为坐标系此时已经发生改变。
例如:对view进行45度旋转:

 

2.2 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
这个方法同样是对view进行旋转,效果类似 CGAffineTransformMakeRotation(CGFloat angle)不同的是这个方法可以叠加其他CGAffineTransform效果(比如缩放)
例如:对view进行45度旋转:

1
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)替换上面的两个方法,具体代码如下:

1
view . transform =    CGAffineTransformRotate ( view . transform , M_PI_2 ) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值