【问题标题】:Objective-C CALayer UIView real rotationObjective-C CALayer UIView 真实旋转
【发布时间】:2012-01-06 11:17:09
【问题描述】:

我正在尝试旋转 UIView 对象,如下图所示 http://i.piccy.info/i7/f8ff7fe488c7c492e6ff6a689bc9cdeb/1-5-2127/60800682/rotation.png

我正在尝试使用 CALayer 的转换,但我得到了这样的结果: http://i.piccy.info/i7/bbb672b058fdfdd251cc90f1ce2b9c1f/1-5-2128/9488743/rotate2.png

【问题讨论】:

  • 如何进行转换?我不得不说我没有完全理解图片,但看起来你的缩放而不是旋转。
  • myLayer.transform = CATransform3DMakeRotation(M_PI/2.8, 1.0, 0.0, 0.0);
  • 2.8后的M_PI只是举例。
  • 是的,不幸的是我的视图是缩放而不是旋转:(
  • 嗯,我认为您应该围绕 Z 轴 (0,0,1) 而不是 X 轴 (1,0,0) 旋转。试试看。

标签: iphone objective-c rotation calayer transformation


【解决方案1】:

如果我理解正确,您希望将视图向后(进入屏幕)命名,并且应该能够实现这样的效果:

float distance = 50;

CATransform3D basicTrans = CATransform3DIdentity;
basicTrans.m34 = 1.0 / -distance;
view.layer.transform = CATransform3DRotate(basicTrans, M_PI_4, 1.0f, 0.0f, 0.0f);

要实现此效果,您需要直接操作其中一个转换值 (m34)。 distance 越低,效果越强。然后您可以围绕 x 轴进行旋转变换(倾斜),在本例中为 PI/4 或 45 度。您可以使用degrees * M_PI / 180.0 计算任意值 pi。

【讨论】:

  • 当视图旋转时,它的高度会发生变化。如果我固定了新的(旋转后)高度,如何计算 M_PI 值
  • 我认为三角函数给了我们:angle = M_PI_4 - asin(newHeight / height) 其中newHeight 应该小于height 但大于零。
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
相关资源
最近更新 更多