Swift中的GLKQuaternion

时间:2014-10-26 09:00:38

标签: swift glkit myo

尝试重新编写为Myo编写的Objective-C代码我遇到了GLKQuaternion类,这是一个联合,并且似乎不支持Swift(Using GLKMath from GLKit in Swift)。

我正在寻找的是解决这个问题的方法。也许在ObjectiveC中完成了Math的混合应用程序,因此我可以访问这些属性。我有什么选择?

1 个答案:

答案 0 :(得分:2)

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

code is available on github。特别是this commit会引起人们的兴趣,因为它显示了需要做的事情。

<强> 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 guide提供了有关如何使Obj-C与Swift一起使用的好提示,反之亦然。