如何确定3D旋转对象离屏幕边缘有多远

时间:2013-06-15 04:50:47

标签: iphone ios objective-c core-animation catransform3d

我使用Core Animation将视图围绕y轴旋转了50度。 我希望视图边缘触及屏幕边缘。我该怎么做?

我知道视图的长度和视图旋转的度数(50度),所以我想我可以使用三角函数确定视图和边缘之间的距离。但是,相机的视角受m34结构的CATransform3D属性影响。如何确定移动视图以与屏幕边缘对齐所需的距离?

CATransform3D rotation = CATransform3DIdentity;
rotation.m34  = -1.0/500.0;
rotation = CATransform3DRotate(rotation, 50.0 * M_PI / 180, 0.0, 1.0, 0.0);
view.layer.transform = rotation;
view.layer.zPosition = 200;

enter image description here

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要以下内容:

Final view

为了简化您的计算,您需要使用anchorPoint的{​​{1}}。 CALayer是应用变换的地方,其效果在旋转中特别可见。我们要做的是告诉anchorPoint围绕其中一个点旋转,而不是中心(这是默认值)。

这是我的CALayer

loadView

我获得的是你上面看到的图像。

希望它有所帮助!

答案 1 :(得分:0)

您希望将最终转换矩阵(包括M34更改)应用于视图边缘的终点,这些终点是您尝试计算的距离。这将为您提供投影空间中您的点的最终位置。

iOS 5添加了GLKit,其中包括用于进行矩阵和向量计算的整个函数库。例如,看看GLKMatrix4MultiplyVector3。该函数采用3部分向量并将其乘以4x4矩阵,并返回得到的3分量向量。

您可能需要GLKMatrix4MultiplyVector4,因为如果我没记错的话,您希望您的矢量拥有比轴数多1个分量(因此对于3D矢量,您需要4分量矢量。)矢量数学不是我的强项,所以当我需要使用它时,我必须查看这些内容。