Как получить доступ к акселерометру iOS в Delphi XE2? - PullRequest
9 голосов
/ 02 сентября 2011

Как получить доступ к акселерометру в iOS с помощью Delphi XE2?

Я попытался просмотреть IDE, но не нашел компонента.

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

Delphi XE2 поддерживает развертывание в OSX на Mac. Развертывание на iPhone , по-видимому, довольно просто , но оно все еще предполагает использование XCode в качестве окончательного инструмента развертывания. Поскольку Delphi «официально» не поддерживает развертывание на аппаратном обеспечении iPhone, я сомневаюсь, что они включили какие-либо компоненты, специфичные для него.

Отказ от ответственности: я только что загрузил XE2 несколько часов назад, и на данный момент я развернул только одно приложение Mac (и оно работало прекрасно). Так что я далеко не эксперт.

Редактировать: Андерс Олссон, очевидно, написал компонент акселерометра для XE2. Я не пробовал, но вот оно .

0 голосов
/ 08 ноября 2011

В блоге Embarcadero есть компонент, который читает акселерометр:
http://edn.embarcadero.com/article/41748
Вот ссылка для загрузки компонента: http://cc.embarcadero.com/item/28609

А вот исходный код Андерса Олссона:
(я использовал это для создания компонента для GPS / Компас).

unit Accelerometer;

{$IFDEF FPC}
{$mode objfpc}{$H+}
{$modeswitch objectivec1}
{$ENDIF}

interface

uses
  SysUtils, Classes, FMX_Types
{$IFDEF FPC}
  , iPhoneAll
{$ENDIF}
  ;

type
  TAccelerateEvent = procedure(x,y : Double) of object;

  TiOSAccelerometer = class(TFmxObject)
  private
    FOnAccelerate: TAccelerateEvent;
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property OnAccelerate: TAccelerateEvent read FOnAccelerate write FOnAccelerate;
  end;

{$IFDEF FPC}
const
  kAccelerometerFrequency = 100.0; // Hz
{$ENDIF}

{$IFDEF FPC}
type
  UIAcceleration = objcclass external (NSObject)
  public
    function timestamp: NSTimeInterval; message 'timestamp';
    function x: UIAccelerationValue; message 'x';
    function y: UIAccelerationValue; message 'y';
    function z: UIAccelerationValue; message 'z';
  end;
{$ENDIF}

{$IFDEF FPC}
type
  AccDelegate = objcclass(NSObject)
    procedure accelerometer_didAccelerate(accelerometer: UIAccelerometer; acceleration: UIAcceleration); message 'accelerometer:didAccelerate:';
  end;
{$ENDIF}

{$IFDEF FPC}
var
  AccDelegatVar: AccDelegate;
{$ENDIF}

var
  MyAccelerometer: TiOSAccelerometer;

procedure Register;

implementation

{$IFDEF FPC}
procedure AccDelegate.accelerometer_didAccelerate(accelerometer: UIAccelerometer; acceleration: UIAcceleration);
begin
  if Assigned(MyAccelerometer) then
    if Assigned(MyAccelerometer.FOnAccelerate) then
      MyAccelerometer.FOnAccelerate(acceleration.x,acceleration.y);
end;
{$ENDIF}

constructor TiOSAccelerometer.Create(AOwner: TComponent);
begin
  inherited;
  {$IFDEF FPC}
  UIAccelerometer.sharedAccelerometer.setUpdateInterval(1.0 / kAccelerometerFrequency);
  AccDelegatVar := AccDelegate.alloc;
  UIAccelerometer.sharedAccelerometer.setDelegate(AccDelegatVar);
  {$ENDIF}
end;

procedure Register;
begin
  RegisterComponents('iOS', [TiOSAccelerometer]);
end;

end.
0 голосов
/ 01 октября 2011

Иосиф прав. Филип Хесс вносил свой вклад в группы новостей Delphi iOS и другую полезную информацию, например:

https://forums.embarcadero.com/message.jspa?messageID=390713&tstart=125

У него также есть эта страница, здесь:

http://web.me.com/macpgmr/ObjP/Xcode4/ObjP_Intro.html

Что может быть полезно для вас. В настоящее время я пробираюсь через все это, чтобы использовать службы CoreLocation (среди прочих). Это определенно не для слабонервных.

...