2

当我使用以下任一代码时,按钮以 3D 而不是 2D 旋转(平放在屏幕上)。如何避免 3D 行为?这是按钮在旋转过程中的样子:

在此处输入图像描述

CGAffineTransform rotationTransform = CGAffineTransformIdentity;
    rotationTransform = CGAffineTransformRotate(rotationTransform, (offset/(180.0 * M_PI)));
    button.transform = rotationTransform;

.

    button.transform = CGAffineTransformRotate(CGAffineTransformIdentity, (offset/(180.0 * M_PI)));

.

button.transform = CGAffineTransformMakeRotation(offset/(180.0 * M_PI));
4

2 回答 2

2

以下是苹果员工的回答:

当您设置变换时,框架的定义会变得不那么明确,以至于您不应再使用它来调整视图的大小或位置。尝试使用 center 属性,您可能不会获得 3D 旋转,而是由于设置 frame 和 trnsform 的复合效果而产生的失真。

于 2013-09-05T22:12:14.927 回答
0

我遇到了同样的问题,这真的很烦人,我终于解决了,但仍然不知道为什么。

当我尝试在“viewDidLayoutSubviews”方法中执行2D 旋转时,我得到了意外的 3D 旋转

double radius = (degree / 180.0) * M_PI;
uiImageView.transform = CGAffineTransformMakeRotation(radius);

我的解决方案是在“viewDidLayoutSubviews”以外的其他地方进行转换,它运行良好。

有趣的是,当烦人的 3D 旋转发生时,我继续调整 iPhone 的方向一段时间,3D 旋转会突然消失,2D 旋转会重新出现并取而代之,但图像会保持扭曲的形状。我想也许 iOS 正在“viewDidLayoutSubviews”中进行一些内部转换,如果我们对其施加额外的转换,事情就会变得一团糟。但是,我的猜测无法解释为什么它会在一段时间后消失。我还尝试对“uiImageView.transform”的成员进行 NSLog,例如“viewDidLayoutSubviews”中的“a,b,c,d,tx,ty”,但一无所知。

解决方案:检查您的代码以查看您是否在“viewDidLayoutSubviews”或其他类似方法中执行旋转,如果是,请尝试将其移到其他地方并交叉手指。

于 2016-01-26T17:47:50.270 回答