如何在Delphi XE2中访问iOS加速度计?

9

如何使用Delphi XE2在iOS中访问加速度计?

我试图查找IDE中的组件,但没有找到。

3个回答

4
Delphi XE2支持在mac上部署。 部署到iPhone 显然相当容易, 但仍需要使用XCode作为最终部署工具。由于Delphi不“官方”支持部署到iPhone硬件,我怀疑他们是否包含任何特定于它的组件。

免责声明:我几个小时前才下载了XE2,并且到目前为止只部署了一个mac应用程序(它运行得非常好)。所以我远非专家。

编辑:Anders Ohlsson显然为XE2编写了加速度计组件。 我没有尝试过,这是它

对于那个踩票的问题很好奇。如果我错了,我很想听听正确的方法是什么。从Windows上的Delphi模拟直接访问iOS硬件会是一种真正的享受。 - JosephStyons
我在下面包含了源代码并使用模板为iOS指南针/GPS编写了一个组件。 - Johan

0

Embarcadero博客上有一个读取加速度计的组件:
http://edn.embarcadero.com/article/41748
这是该组件的下载链接:http://cc.embarcadero.com/item/28609

以下是Anders Ohlsson的源代码:
(我用它来构建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

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