应用CATransform3DRotate后,UIView消失

时间:2014-04-21 11:29:56

标签: ios objective-c rotation catransform3d

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

    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度,从而禁用旋转。

由于

1 个答案:

答案 0 :(得分:0)

你的代码使用的角度是度数,这很好(因为你在应用旋转之前转换为弧度。)

只需将代码放入手势识别器中,即可将角度限制在0到85度的范围内。 (尝试上限,看看在页面太薄之前你能得到的接近90%,以保持深度的错觉。)问题解决了。