【问题标题】:UIView disappears after applying CATransform3DRotate应用 CATransform3DRotate 后 UIView 消失
【发布时间】:2014-04-21 11:29:56
【问题描述】:

如何确定 UIView 的旋转角度值是否垂直于 Y 轴或将旋转角度限制为仅圆的四分之一而不是整个 360 度旋转。 我有一个带有以下应用 CATransformation 的 UIView。

    t = CATransform3DIdentity;
    //Add the perspective!!!
    t.m34 = 1.0/ 300;
    t = CATransform3DRotate(t, 45.0f * M_PI / 180.0f, 0, 1, 0);
    self.containerView.layer.sublayerTransform = t;

喜欢这个link1 并使用以下代码在旋转的 UIView 之外的空间中基于 UIPanGesture 更改旋转角度

    - (void)handleRevealGestureStateChangedWithRecognizer:(UIPanGestureRecognizer *)recognizer{
//Calculating percent of translation.
CGPoint translation = [recognizer translationInView:recognizer.view.superview];
CGFloat rotationpercent = translation.x / recognizer.view.frame.size.width;
[self rotate:rotationpercent];     //calling method to transform based on translation value

}

- (void)rotate:(CGFloat)rotateDegress{
CGFloat angle =  M_PI * rotateDegress;
t = CATransform3DRotate(t, angle, 0, 1, 0);
self.containerView.layer.sublayerTransform = t;

}

这会旋转视图,并且对于某些角度,视图要么垂直于 Y 轴,进一步超出窗口以 360 度旋转,如 link2 所示。

因此可以确定角度是否超过 90 度,从而禁用旋转。

谢谢

【问题讨论】:

    标签: ios objective-c rotation catransform3d


    【解决方案1】:

    您的代码使用以度为单位的角度,这很好(因为您在应用旋转之前转换为弧度。)

    只需在手势识别器中输入代码,将角度限制在 0 到 ~85 度的范围内。 (用上限进行实验,看看在页面太薄而无法保持深度错觉之前,您可以达到多近 90%。)问题解决了。

    【讨论】:

    • Duncan,感谢您的解决方案,但我在这里遇到的问题是,由于旋转角度值是根据平移手势计算的,因此 UIView 出现的范围似乎与 0.122235、0.090892、0.007812 不同的多个任意值垂直于 Y 轴。因此,似乎无法按照您的建议确定更接近的极限。
    • 在您的第二个代码块中,您使用手势识别器来计算旋转百分比,但随后您不使用它来计算旋转度。如果 rotateDegress 度是一个堆栈变量,它可能包含垃圾,所以你得到半随机的结果。 (除非有你没有发布的代码)
    • 是的,请原谅我错过了评论,在我的第二个代码块中,从手势识别器计算的“旋转百分比”作为参数传递给应用翻译并分配给变量名的方法旋转度'。所以 rotateDegress 不是一个包含垃圾值的堆栈变量。
    • 好的,但魔鬼在细节中。您几乎可以肯定在计算旋转角度(以度为单位)和/或从度数转换为弧度的代码中存在错误。您需要准确地发布正在运行的代码,因为这是可能包含错误的代码。我们无法帮助调试我们看不到的代码。我建议让您的代码计算临时变量中的最终弧度值。然后添加一条日志语句以在应用该值时记录该值(或使用断点操作记录该值,以便将其关闭。)
    • Duncan,我已经编辑了这个问题,添加了在平移手势翻译中获取旋转度数的完整代码(第二个代码块)并使用该值转换视图(第三个代码块)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多