从一个结构体转换为另一个结构体

10

我正在将一些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
看起来这个问题在Objective-C中已经有答案了这里,建议很容易转移到Swift。 - Airspeed Velocity
2
为什么不使用 SCNMatrix4Invert - rintaro
1个回答

3

好的,

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

如rintaro上面提到的那样,我使用了SCNMatrix4Invert并且它有效。

因此,现在有效的Swift代码如下:

let textNode = SCNNode(geometry: text)
textNode.transform = SCNMatrix4Invert(self.chartNode.worldTransform)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接