2012-04-20 3 views
0

Я использую CGAffineTransformMakeRotation для поворота поднабора, используя его свойство transform. Позже мне нужно выяснить, как далеко подвешено вращение. Я понимаю, что я мог бы просто использовать int для отслеживания этого, но есть ли простой способ получить текущее вращение subview?iOS Получить поворот Subview

+0

Повторяющийся вопрос можно найти по адресу: http: //stackoverflow.com/questions/2051811/iphone-sdk-cgaffinetransform-getting-the-angle-of-rotation-of-an-object –

+1

Посмотрите на мой [ответ] (http://stackoverflow.com/a/9712584/1207152) на [вопрос] (http://stackoverflow.com/q/2051811/1207152), упомянутый @TheKraken. – sch

ответ

5

CGAffineTransformMakeRotation является explicitly defined возвращать матрицу с соз (угол) в преобразовании своей стоимости a, sin (угол) в b, и т.д. (и, учитывая то, как преобразующие работы, это единственное, что он действительно может сделать).

Следовательно, вы можете обработать текущее вращение, выполнив простую инверсную тригонометрию. atan2 - это, вероятно, то, что нужно использовать, потому что оно автоматически определит квадранты соответствующим образом.

Так, например,

- (float)currentAngleOfView:(UIView *)view 
{ 
    CGAffineTransform transform = view.transform; 
    return atan2f(transform.b, transform.a); 
} 

Потому что будет делать арктангенс, который будет привлекать разделив a и b поля соответствующим образом, этот метод будет продолжать работать, даже если вы применяете масштабирования (до тех пор, как это то же самое для каждой оси) или перевод.

Если вы хотите применить более сложные или произвольные преобразования, тогда все становится намного сложнее. Вам нужно посмотреть, как вычислить нормальные матрицы. Из памяти, я думаю, вы хотите, чтобы адъюгат, который так же забавна, как это звучит.

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