Преобразование из одной структуры в другую
Я конвертирую код Objective-C в код Swift, и у меня есть следующая проблема:
Код Objective-C
SCNNode *textNode = [SCNNode nodeWithGeometry:text];
textNode.transform = CATransform3DInvert(self.chartNode.worldTransform);
Это преобразованный код, который я пробовал:
let textNode = SCNNode(geometry: text)
textNode.transform = CATransform3DInvert(self.chartNode.worldTransform)
Однако я получаю сообщение об ошибке: "SCNMatrix4 не конвертируется в CATransform3D"
Я понял, что CATransform3DInvert принимает параметр типа CATransform3D, а параметр, который я включил, имеет тип SCNMatrix4.
Я попробовал следующую попытку броска:
textNode.transform = CATransform3DInvert(CATransform3D(self.chartNode.worldTransform))
но это не работает.
Затем я обнаружил, что оба CATransform3D и SCNMatrix4 являются двумя структурами, и я не уверен, как конвертировать из одной структуры в другую (или даже если можно преобразовать между структурами в Swift?)
Может быть, есть еще один более простой подход?
Любая помощь будет оценена - Спасибо.
Ответы
Ответ 1
Хорошо,
Ссылка, предоставленная Airspeed Velocity, имеет приятное объяснение, которое легко преобразовать в Swift (на самом деле это то же самое).
CATransform3D и т.д. - это Mac OS X и не для iOS - вместо этого используется iOS SCNMatrix4 и т.д.
В связанной записи - файл заголовка вы можете найти используемые типы SceneKitTypes.h - если вы хотите посмотреть, что копия находится на github здесь: https://github.com/andymatuschak/Khan-Academy-Offer-Acceptance-Toy/blob/master/§/SceneKitTypes.h
Я использовал SCNMatrix4Invert как rintaro, упомянутый выше, и он работает.
Итак, теперь работает код Swift:
let textNode = SCNNode(geometry: text)
textNode.transform = SCNMatrix4Invert(self.chartNode.worldTransform)