【发布时间】:2015-07-17 07:13:57
【问题描述】:
我想通过将其中一个点居中到屏幕中心来为视图设置动画,然后将其放大。
所以,如果我有这个屏幕 (S),里面有一个视图 (V) 和某个点 (x):
+-------------+
|S-----------+|
||V ||
|| ||
|| ||
|| ||
|| ||
|| x ||
|| ||
|+-----------+|
+-------------+
我想让它动画到这个位置:
+-----------+
+---V---------+|
|S | ||
| | ||
| | ||
| | ||
| | x ||
| | ||
| +----------|+
| |
| |
+-------------+
点在屏幕中心的位置,然后像这样缩放它:
+-------------------+
|V |
| |
| |
| |
|+-------------+ |
||S | |
|| | |
|| | |
|| | |
|| x | |
|| | |
|| | |
|| | |
|| | |
|+-------------+ |
+-------------------+
但是,即使使用 CGAffineTransformConcat,我也无法做到这一点,尽管我认为它是专为此类情况设计的。
我试过这个:
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(deltaPoint.x, deltaPoint.y);
CGAffineTransform scaleTransform = CGEqualAffineTransformMakeScale(40);
self.screenView.transform = CGAffineTransformConcat(translateTransform, scaleTransform);
其中deltaPoint 是一个CGPoint,它的x 和y 等于点的绝对坐标(相对于屏幕)和屏幕中心坐标之间的距离,但它使稍微向右一点。
我也尝试在缩放后计算deltaPoint无济于事:
self.screenView.transform = CGEqualAffineTransformMakeScale(40);
// calculate deltaPoint
self.screenView.transform = CGAffineTransformTranslate(self.screenView.transform, deltaPoint.x, deltaPoint.y);
在这两种情况下,如果我注释掉缩放变换,翻译工作,它完全移动到中心,所以问题不在于deltaPoint 计算。
【问题讨论】:
-
@Eiko,我已经更新了问题。
-
你有没有尝试过顺序颠倒的concat?
-
@Eiko,是的,但它仍然不起作用。
标签: objective-c frame cgaffinetransform