2014-04-21 5 views
0

Как определить, является ли значение угла поворота UIView перпендикулярным оси Y или ограничить угол поворота только четвертью круга вместо целых 360 оборотов. У меня есть UIView с приведенной ниже ссылкой CATransformation.UIView исчезает после применения CATransform3DRotate

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 и изменение угла поворота на основе UIPanGesture в пространстве за пределами повернутой UIView с ниже код

- (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 градусов, так что вращение отключено.

Благодаря

ответ

0

Ваш код использует углы в градусах, это хорошо (так как вы преобразовать в радианы перед применением вращения.)

Просто поместите код в ваш жест распознаватель, который ограничивает углы в диапазоне от 0 до ~ 85 градусов. (Экспериментируйте с верхним пределом, чтобы увидеть, насколько близко к 90% вы можете получить, пока страница слишком тонкая, чтобы поддерживать иллюзию глубины.) Проблема решена.

+0

Duncan, спасибо за решение, но проблема, с которой я столкнулся, состоит в том, что значения угла поворота вычисляются из жесты панорамы, кажется, что несколько произвольных значений различаются от 0.122235,0.090892, 0,007812 для отображения UIView перпендикулярно оси Y . Таким образом, невозможно определить предел ближе, как вы предполагали. – srm

+0

В вашем втором блоке кода вы используете распознаватель жестов для вычисления rotationpercent, но тогда вы не используете его для вычисления rotateDegress. Если rotateDegress degrees - это переменная стека, она, вероятно, содержит мусор, и поэтому вы получаете полуслучайные результаты. (Если нет кода, который вы не опубликовали) –

+0

Да, простите меня за то, что я пропустил, чтобы прокомментировать, что в моем втором блоке кода рассчитанный «rotationpercent» из распознавателя жестов был передан в качестве параметра методу применения перевода и присвоен переменной имя 'rotateDegress'. Поэтому rotateDegress не является переменной стека, которая содержит значения мусора. – srm

 Смежные вопросы

  • Нет связанных вопросов^_^