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

原创 2015年07月07日 10:54:29

(一)

对于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 的旋转与缩放以及同时应用两种效果(一)中,我们介绍了对UIView进行缩放与旋转的几种方法,这篇文章讲继续这些方法的具体应用的探讨。

我们考虑这样一种需求:对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)替换上面的两个方法,具体代码如下:

 

到此,我们在缩放的同时旋转的目的已经达到

如何移动应用了CGAffineTransform效果的UIView

UIView 的旋转与缩放以及同时应用两种效果(一)与 UIView 的旋转与缩放以及同时应用两种效果(二)中我们探讨了如何对UIView应用旋转以及缩放效果,下面我们来探讨一下如何对应用了CGAffineTransform效果的UIView进行移动操作。(这里假设view是UIView的一个实例,中心点原始坐标为(50,50))

通常我们怎么改变一个view的位置呢?你肯定想得到,那就是设置一个新的中心点给view。代码是如此简单:

 

可是等等,我的view刚刚应用了旋转和缩放效果,现在我只是移动了一点点的距离怎么看起来view在乱跑,完全不是我要的(100,50);

如前面两篇博文所讲,在应用旋转与缩放效果时,已经对原始的坐标系有了影响。我们知道CGAffineTransform是一个矩阵变换,所以我们只要根据矩阵变换的知识,计算出我们需要的中心点不就行了?可是。。。数学早忘光了,该怎么办?

在Apple的文档中我注意到这样一个方法:CGAffineTransformCGAffineTransformTranslate(CGAffineTransform t,  CGFloat tx, CGFloat ty)

问题迎刃而解。假设在view的touch begin方法里去的了拖动的其实坐标,那么在touch move方法里你可用如下代码实现view的拖动操作(这里的self指的是view本身):



XML and Databases

XML and DatabasesCopyright 1999, 2000 by Ronald BourretSeptember, 1999 (Last updated November 2000)T...
  • ghj1976
  • ghj1976
  • 2001-05-25 13:48:00
  • 1700

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

转载自:http://www.travelchu.com/2014/08/13/uiview-%E7%9A%84%E6%97%8B%E8%BD%AC%E4%B8%8E%E7%BC%A9%E6%94%B...
  • liangliang2727
  • liangliang2727
  • 2015-08-07 00:56:55
  • 1023

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

UIView 的旋转与缩放以及同时应用两种效果 我们来讨论一下 CGAffineTransform在UIView的缩放与旋转上的应用。以下假设view为UIView的一个实例。 1. UIVi...
  • lf20105103039
  • lf20105103039
  • 2014-12-10 18:33:27
  • 350

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

对于UIView的缩放,最简单的方法可以是修改view的frame,这里不做讨论。 我们来讨论一下 CGAffineTransform在UIView的缩放与旋转上的应用。以下假设view为UIVie...
  • Taylor_C
  • Taylor_C
  • 2015-04-15 16:20:01
  • 193

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

转载自:http://www.travelchu.com/2014/08/13/uiview-%E7%9A%84%E6%97%8B%E8%BD%AC%E4%B8%8E%E7%BC%A9%E6%94%B...
  • liangliang2727
  • liangliang2727
  • 2015-08-07 00:58:11
  • 329

iOS 【CGAffineTransform方法类-视图缩放、旋转和平移】

iOS CGAffineTransform 方法类 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放、旋转和平移操作...
  • Felicity294250051
  • Felicity294250051
  • 2016-02-29 19:40:48
  • 2711

iOS学习(frame、bounds、center:)以及UIView的旋转,平移和缩放

1. frame、bounds、center: frame:是以父视图的左上角为坐标原点,它是控件所在矩形框的位置和尺寸 bounds:同是为控件所在矩形框位置和尺寸,但是它是以自己...
  • sinat_29998157
  • sinat_29998157
  • 2015-07-28 20:36:20
  • 2178

iOS 基于UIView抖动 来回移动 缩放 翻转效果

1.来回转动 抖动效果
  • li836497449
  • li836497449
  • 2014-04-17 16:58:12
  • 1282

iOS开发中同时识别旋转与缩放手势

iOS开发中同时识别旋转与缩放手势 今天我在使用UIRotationGestureRecognizer和UIPinchGestureRecognizer时,发现它们在默认情况下不能同时被识别。而且在...
  • dcba62
  • dcba62
  • 2015-11-21 18:34:48
  • 550

Swift3.0 动画(缩放、晃动、翻转)

1.缩放 2.左右摇晃 3.翻转
  • C_calary
  • C_calary
  • 2016-06-28 00:55:30
  • 4129
收藏助手
不良信息举报
您举报文章:UIView 的旋转与缩放以及同时应用两种效果及应用
举报原因:
原因补充:

(最多只允许输入30个字)