【问题标题】:Rotate a UIView in 2D, not 3D以 2D 而非 3D 旋转 UIView
【发布时间】:2013-08-02 05:09:38
【问题描述】:

当我使用以下任一代码时,按钮会以 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));

【问题讨论】:

  • CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(offset/(180.0*M_PI); 另一个连接矩阵,(奇怪的是它不起作用)
  • 我试过了,旋转还是3D。
  • 你是不是修改了backing layer,或者一些转换矩阵的因素,比如m34的值? m34添加一种视角是punto di fuga(找不到任何英文翻译,找到消失点)
  • @Stavash 正确的翻译应该是在维基上找到的“消失点”。我正在考虑这个问题,因为按钮似乎有一种视角,并且似乎在另一个 avis 上旋转。这就是为什么我要问应用程序是否正在播放层。
  • @Andrea 明白了。它可能正在玩图层 - 这应该非常简单。我建议将此问题提交给只有此按钮和应该旋转它的代码的辅助项目。

标签: ios uiview core-graphics


【解决方案1】:

这是一位 Apple 员工的回答:

当你设置一个变换时,框架变得不太明确,到 指出您不应再使用它来调整视图的大小或位置。尝试 改为使用 center 属性,您可能无法获得 3D 旋转,但由于设置的复合效应而失真 框架和 trnsform。

【讨论】:

  • +1。这不足为奇——文档明确指出,如果transform 不统一,则frame 属性将变为未定义。如果您在动画块中同时更改两者,那么每一帧 Core Animation 都会设置一个,然后设置另一个。不管它采用哪种方式,在某些时候你会尝试调整未定义的值,产生未定义的结果。
  • 问题终于解决了,挫折结束了。一个8岁的答案。这就是我喜欢 stackoverflow 的原因。
【解决方案2】:

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

当我尝试在“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”或其他类似方法中执行旋转,如果是,请尝试将其移到其他地方并交叉手指。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2019-07-04
    • 2012-05-24
    • 2015-09-14
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多