在2D中旋转UIView,而不是3D

时间:2013-08-02 05:09:39

标签: ios uiview core-graphics

当我使用以下任何一段代码时,该按钮以3D而不是2D(平面对着屏幕)旋转。如何避免3D行为?这是旋转期间按钮的样子:

enter image description here

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));

2 个答案:

答案 0 :(得分:2)

以下是Apple员工的答案:

  

当你设置一个变换时,框架变得不那么明确了   指出您不应再使用它来确定视图的大小或位置。尝试   使用中心属性,你可能没有得到3D   旋转,但由于设置的复合效果导致的失真   框架和转换。

答案 1 :(得分:0)

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

当我尝试使用

在“viewDidLayoutSubviews”方法 中执行2D旋转 时出现意外的3D旋转
double radius = (degree / 180.0) * M_PI;
uiImageView.transform = CGAffineTransformMakeRotation(radius);

我的解决方案是在“viewDidLayoutSubviews”以外的其他位置执行转换,并且它运行正常。

有趣的是,当烦人的3D旋转发生,并且我一直定向我的iPhone一段时间后,3D旋转将突然消失,2D旋转将返回并取代,但图像保持扭曲的形状。我想也许iOS正在“viewDidLayoutSubviews”中进行一些内部转换,如果我们对它进行额外的转换,事情会搞砸。但是,我的猜测无法解释为什么它会在一段时间后消失。我还尝试了NSLog“uiImageView.transform”的成员,比如“viewDidLayoutSubviews”中的“a,b,c,d,tx,ty”,但没有得到任何线索。

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