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

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

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

1
view.center=CGPointMake(100.0, 50.0);

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

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

在Apple的文档中我注意到这样一个方法:CGAffineTransformCGAffineTransformTranslate(CGAffineTransformt,CGFloattx,CGFloatty)

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

1
2
3
float offsetX = currentPoint.x - _touchBeginPoint.x;
float offsetY = currentPoint.y - _touchBeginPoint.y;
self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);

热评文章