【问题标题】:Converting from one struct to another从一种结构转换为另一种结构
【发布时间】:2015-02-13 01:12:58
【问题描述】:

我正在将一些 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 is not convertible to CATransform3D'

我意识到 CATransform3DInvert 需要一个 CATransform3D 类型的参数,而我包含的参数是 SCNMatrix4 类型的。

我尝试了以下演员尝试:

textNode.transform = CATransform3DInvert(CATransform3D(self.chartNode.worldTransform))

但这不起作用。

然后我发现 CATransform3D 和 SCNMatrix4 都是结构,我不确定如何从一个结构转换到另一个结构(或者即使可以在 Swift 中的结构之间转换?)

也许还有另一种更简单的方法?

任何帮助将不胜感激 - 谢谢。

【问题讨论】:

  • 看起来这是 Objective-C here 的答案,建议应该很容易转移到 Swift。
  • 你为什么不用SCNMatrix4Invert

标签: swift struct scenekit


【解决方案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)

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多