ios - 如何通过底部中心旋转图像?

标签 ios objective-c cocoa-touch core-graphics

我试图通过将 View 层的 anchorPoint 属性 设置为 CGPointMake(0.5, 1) 来旋转图像的底部中心。它确实根据底部中心,但 ImageView 底部中心被转换为 ImageView 中心位置,因此整个图像被平移到图像高度的一半。如何 ImageView 保留其中心但仍围绕其底部中心旋转?

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

大家好,这是我希望旋转如何作用于图像的图片演示!

enter image description here

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

enter image description here

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

enter image description here

应用 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/

相关文章:

iOS - 图标在启动时拉伸(stretch)

ios - 使用 NSTimer 的周期性本地通知不起作用

ios - 校准 UI 加速度计?

ios - 将 subview Controller 的 View 添加到父 View Controller 的 subview

ios - Bool 值未发送到目标 ViewController

objective-c - 在 iOS 8 的横向显示状态栏

ios - 苹果手机 : How do I add a text view that the font size decreases to fit text view size when needed to

objective-c - 为什么不使用界面生成器

objective-c - 双括号方法语法。

iphone - 如何将 UIToolbar 添加到 UIViewController?