我试图通过将 View 层的 anchorPoint 属性 设置为 CGPointMake(0.5, 1)
来旋转图像的底部中心。它确实根据底部中心,但 ImageView 底部中心被转换为 ImageView 中心位置,因此整个图像被平移到图像高度的一半。如何 ImageView 保留其中心但仍围绕其底部中心旋转?
有没有人以前遇到过这个问题?
大家好,这是我希望旋转如何作用于图像的图片演示!
这是未转换的原始图像! 如您所见,我放了一个红点来指示图像的底部中心。
这是旋转后的图像。图像已顺时针旋转了几度。这已按其中心旋转,这又不是我想要的!!
应用 Calebs 答案中发布的变换后获得的图像..注意:变换应用于包含上述垂直图像的 ImageView !正如您所看到的旋转缺陷,底部中心已经上升,甚至旋转是不同的。它旋转了 180 度,整个图像平移了一段距离。
重申一下,我只希望图像像时钟指针一样旋转,但围绕其底部中心旋转
谢谢!
最佳答案
假设您想旋转绘制图像的 View ,通常的做法是从三个单独的矩阵组成一个变换矩阵。第一个将图像向左平移其宽度的一半。第二个旋转 View 。第三个将图像向右平移其宽度的一半(即它与第一个相反)。当您将这三者放在一起时,您会得到一个围绕其底部中心旋转图像的矩阵。
例如,如果您有:
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
设置为 ImageView 的变换,您会发现该 View 围绕底部中心旋转了 1.0 弧度(或您将 r
设置为的值)。
除了更正我之前的错误之外,Peter Hosey 的评论指出另一种选择是旋转图层而不是 View 。我不认为这是你要找的,但如果是你应该知道层上的转换发生在它的 anchorPoint
上,默认情况下它被设置为其边界的中心长方形。要围绕边界矩形的底部中心旋转,您可以先将 anchor 设置为底部中心,然后应用旋转变换。 (请注意,图层的 transform
属性是 CATransform3D
;如果您想像上面那样使用仿射变换,请使用 setAffineTransform:
方法.)
关于ios - 如何通过底部中心旋转图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304544/