2

尝试重新编写为Myo编写的 Objective-C 代码时,我遇到了 GLKQuaternion 类,它是一个联合并且在 Swift 中似乎不受支持(在 Swift 中使用来自 GLKit 的 GLKMath)。

我正在寻找的是一种解决方法来让它工作。也许是在 ObjectiveC 中完成了数学的混合应用程序,所以我可以访问这些属性。我有哪些选择?

4

1 回答 1

2

最终使用了一个桥接文件并创建了一个小的包装层,以允许我从 Swift 访问我想要的数据。我称它为 polyfill,类似于我们在网络上用于增强旧浏览器功能的东西。

代码可在 github 上找到。特别是这个提交会很有趣,因为它显示了需要做什么。

Polyfill.h

@interface OrientationData: NSObject
  @property (nonatomic) TLMAngle *pitch;
  @property (nonatomic) TLMAngle *yaw;
  @property (nonatomic) TLMAngle *roll;
@end

@implementation OrientationData
@end

@interface GLKitPolyfill: NSObject
+ (OrientationData *) getOrientation:(TLMOrientationEvent *)orientationEvent;
@end

Polyfill.m

+ (OrientationData *) getOrientation:(TLMOrientationEvent *)orientationEvent {
  TLMEulerAngles *angles = [TLMEulerAngles anglesWithQuaternion:orientationEvent.quaternion];

  OrientationData *result = [OrientationData new];
  result.pitch = angles.pitch;
  result.yaw = angles.yaw;
  result.roll = angles.roll;

  return result;
}

ViewController.swift

let angles = GLKitPolyfill.getOrientation(orientationEvent)
let pitch = CGFloat(angles.pitch.radians)
let yaw = CGFloat(angles.yaw.radians)
let roll = CGFloat(angles.roll.radians)

Apples Mix & Match 指南提供了有关如何使 Obj-C 与 Swift 一起工作的好技巧,反之亦然。

于 2014-10-26T13:07:21.730 回答