2016-04-23 4 views
5

enter image description hereПоворот X, Y и ось Z все вместе

Я первый 3D повернуть плоскую фигуру в Illustrator или Photoshop, получить точные углы (х, у и г) применяется к нему в средстве дизайна, а затем применить те же самые углы к UILabel, расположенному поверх изображения, чтобы визуально синхронизировать их.

Я выяснил, как вращать 2 оси одновременно с помощью CATransform3DConcat, но тогда я не уверен, как применять третий.

float angleX = -18 * M_PI/180; 
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0); 
float angleY = -26 * M_PI/180; 
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0); 
CATransform3D combo1 = CATransform3DConcat(t1, t2); 
self.labelPlay.layer.transform = combo1; 

EDIT

не Пытаюсь это сейчас, но до сих пор нет хорошего. Пробовал все комбинации разных заказов, но ничего.

float angleX = -18 * M_PI/180; 
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0); 
float angleY = -26 * M_PI/180; 
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0); 
float angleZ = 8 * M_PI/180; 
CATransform3D t3 = CATransform3DMakeRotation(angleZ, 0, 0, 1); 

self.label.layer.transform = CATransform3DConcat(CATransform3DConcat(t3, t2), t1); 
+0

Что вы пытаетесь достичь? Вы можете вращаться в любом направлении, задавая разные значения для 2-го, 3-го и 4-го аргументов для CATransform3DMakeRotation. – jtbandes

+0

Сначала я 3D вращаю плоский квадрат в Illustrator или Photoshop, получаю точные углы (x, y и z), применяемые к нему в инструменте проектирования, а затем применяю те же самые углы к UILabel, расположенному поверх квадрата, чтобы визуально их визуализировать , – durazno

+1

Заказ будет иметь значение. Можете ли вы показать, что именно вы хотите, и что он сейчас делает? – jtbandes

ответ

1

Я не совсем уверен, но я думаю, что это может быть так.

Для дизайнеров мышление углов от 3D вращения в Illustrator/Photoshop будет работать с CATransform3D, это почти так, но вам, возможно, придется изменить одну крошечную вещь.

Предположим, что у вас есть x: -18, y: -26 и z: 8 в вашем инструменте проектирования. Переключение y и z в положительное/отрицательное решение моей проблемы. Итак, теперь у меня есть -

float angleX = -18 * M_PI/180; 
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0); 
float angleY = 26 * M_PI/180; 
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0); 
float angleZ = -8 * M_PI/180; 
CATransform3D t3 = CATransform3DMakeRotation(angleZ, 0, 0, 1); 

self.label.layer.transform = CATransform3DConcat(CATransform3DConcat(t1, t2), t3); 

Я не могу сказать, почему именно, но это верно вращается.

+0

Я тоже пришел к такому выводу. Если вы посмотрите на маленький глиф рядом с полем -26 °, он показывает поворот, который должен перемещать лицо куба вправо. Угол, который вы выбрали, отрицательный, но лицо идет вправо. По-моему, это действительно противоположно тому, что должно быть. – jtbandes

+0

Это правда .. Я этого не замечал до сих пор. Но опять же, если вы посмотрите на ось Z, хотя она указывает, что угол должен быть положительным, и он кажется положительным, превращая его отрицательным, фактически повернутым должным образом, поэтому он запутан. Так или иначе, это решено! – durazno