1

我试图通过将视图层的anchorPoint属性CGPointMake(0.5, 1)设置为来旋转图像的底部中心。它确实基于底部中心旋转,但是图像视图底部中心被转换为图像视图中心位置,因此整个图像是向上平移图像高度的一半。如何让图像视图保持其中心但仍围绕其底部中心旋转?

有没有人遇到过这个问题?

嘿,伙计们,这里有一个图片演示,我希望旋转在图像上起作用!

在此处输入图像描述

这是未转换的原始图像!如您所见,我放了一个红点来指示图像的底部中心。

在此处输入图像描述

这是旋转后的图像。图像已经顺时针旋转了几度。这已经被它的中心旋转了,这又不是我想要的!

在此处输入图像描述

应用在 Calebs answer 中发布的变换后获得的图像。注意:变换应用于包含上述垂直图像的图像视图!正如您所见,旋转中的缺陷底部中心已经上升,甚至旋转也不同。它进行了 180 度的旋转,整个图像向上平移了一段距离。

重申一下,我只希望图像像时钟的指针一样旋转,但围绕其底部中心

谢谢!

4

1 回答 1

1

假设您要旋转绘制图像的视图,通常的方法是由三个单独的矩阵组成一个变换矩阵。第一个将图像向左平移其宽度的一半。第二个旋转视图。第三个将图像向右平移其宽度的一半(即,它是第一个的倒数)。当你把这三个放在一起时,你会得到一个矩阵,它将图像围绕其底部中心旋转。

例如,如果您有:

CGFloat x = imageWidth/2.0;
CGFloat r = 1.0; // some value in radians;

您可以像这样设置转换:

CGAffineTransform t1 = CGAffineTransformMakeTranslation(-x, 0);
CGAffineTransform t2 = CGAffineTransformRotate(t1, r);
CGAffineTransform t3 = CGAffineTransformTranslate(t2, x, 0);

t3是最终的转换,将在一个步骤中进行平移、旋转和平移。如果您设置t3为图像视图的变换,您会发现视图r围绕底部中心旋转了 1.0 弧度(或您设置的任何值)。

除了纠正我之前的错误之外,Peter Hosey 的评论指出,另一种选择是旋转图层而不是视图。我认为这不是您要查找的内容,但如果是,您应该知道图层上的转换发生在它的anchorPoint周围,默认情况下设置为其边界矩形的中心。要围绕边界矩形的底部中心旋转,您可以先将锚点设置为底部中心,然后应用旋转变换。(请注意,transform图层的属性是 a CATransform3D;如果要使用上述仿射变换,请使用该setAffineTransform:方法。)

于 2013-08-19T01:20:31.190 回答