GLKQuaternion в Swift

Пытаясь переписать код Objective-C, написанный для Myo, я наткнулся на класс GLKQuaternion, который представляет собой объединение и, похоже, не поддерживается в Swift (Использование GLKMath из GLKit в Swift).

Я ищу обходной путь, чтобы заставить это работать. Может быть, гибридное приложение с математикой, выполненное в ObjectiveC, чтобы я мог получить доступ к этим свойствам. Каковы мои варианты?


person Michael Yagudaev    schedule 26.10.2014    source источник


Ответы (1)


В итоге я использовал файл моста и создал небольшой слой-оболочку, чтобы предоставить мне доступ к нужным мне данным из Swift. Я назвал это полифиллом, похожим на то, что мы использовали в Интернете для расширения возможностей старых браузеров.

код доступен на github. В частности, эта фиксация будет представлять интерес, поскольку она .

Полифилл.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

Полифилл.м

+ (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 и наоборот.

person Michael Yagudaev    schedule 26.10.2014
comment
Myo iOS SDK был обновлен, чтобы больше не использовать GLKit (чтобы сделать его более совместимым со Swift). - person Mark; 31.03.2015