【问题标题】:Half of my view disappear after CATransform3DRotateCATransform3DRotate 后我的一半视图消失了
【发布时间】:2013-01-28 13:28:37
【问题描述】:

我有 1 个视图,在这个视图中我有 1 个 UIImageView 和 UILabel,当我旋转视图时,一半的视图消失了。

这是我的代码

viewToAnimate 是包含图像和标签的视图。

CATransform3D _3Dt = CATransform3DRotate(viewToAnimate.layer.transform, DEGREES_TO_RADIANS(beginValue), 0.0, 1.0, 0);
_3Dt.m34 = 1.0 / -300;

viewToAnimate.layer.transform = _3Dt;

CATransform3D _scale;

if (needZoom) {
    _scale = CATransform3DScale(viewToAnimate.layer.transform , 1+scale, 1+scale, 1+scale);

    if (_scale.m11 > 1) {
        _scale.m11 = 1;
        _scale.m22 = 1;
        _scale.m33 = 1;
    }
}
else  {
    _scale = CATransform3DScale(viewToAnimate.layer.transform , 1-scale, 1-scale, 1-scale);
}

viewToAnimate.layer.transform = _scale;
//viewToAnimate.layer.zPosition = sin(DEGREES_TO_RADIANS(beginValue)*MOSAIC_WIDTH)+1;

【问题讨论】:

    标签: ios catransform3drotate


    【解决方案1】:

    DEGREES_TO_RADIANS 的值是多少?有没有机会 M_PI/2? 您的代码告诉您正在围绕 y 轴旋转。查看第一行的最后 3 个参数:

    0.0, 1.0, 0
    

    如果您提供这个,那么这是预期的行为 - 考虑一个面向您的平面并想象它围绕 y 轴旋转 +/- 90 度,它肯定会消失。

    【讨论】:

    • DEGREES_TO_RADIANS 是 DEGREES_TO_RADIANS(x) (M_PI * x / 180.0)。在添加 UIImageView 之前,这段代码可以正常工作,但是当我添加 UIImageView 时,我有这个错误。旋转与手指移动一起工作。我在 touchesMoved: 中调用这段代码,滑动 320px 时的最大旋转角度为 80º
    • 您在旋转哪个视图?它相对于 imageview 的 z 位置是多少?
    • 我移动了容器视图,这个视图有 2 个子视图。如果我调用 viewToAnimate.layer.zPosition,返回值为 0 这是我的应用程序启动时的屏幕截图:dl.dropbox.com/u/9014142/IMG_0129.PNG 当我移动时:dl.dropbox.com/u/9014142/IMG_0130.PNG
    • 我找到了解决办法,我的视图消失是由于背景UIImageView,需要将背景图像的zposition设置为-400。
    • 很高兴你找到了。如果我的回答有帮助,请标记为正确,这将提高您的纠正率,并帮助您将来更快地获得答案。
    【解决方案2】:

    正如 Diego 对另一个答案的评论中提到的,这可能是由 zPosition 问题引起的。通过将 zPosition 设置为更高的值,让您的视图高于其他所有视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多