簡體   English   中英

如何在Delphi XE2中訪問iOS加速度計?

[英]How to access iOS accelerometer in Delphi XE2?

如何使用Delphi XE2訪問iOS中的加速度計?

我嘗試通過IDE查找,但沒有找到組件。

Delphi XE2支持在mac上部署到OSX。 部署到iPhone 顯然非常簡單 ,但它仍然涉及使用XCode作為最終部署工具。 由於Delphi沒有“正式”支持部署到iPhone硬件,我懷疑它們是否包含了特定於它的任何組件。

免責聲明:我剛剛在幾個小時前下載了XE2,到目前為止我只部署了一個mac應用程序(並且工作得非常好)。 所以我遠非專家。

編輯:Anders Ohlsson顯然為XE2編寫了一個加速度計組件。 我沒試過,但現在就是

約瑟夫是對的。 Philip Hess一直在為Delphi iOS新聞組和其他有用的信息做出貢獻,例如:

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

他也有這個頁面,這里:

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

這可能對你有所幫助。 我目前正在瀏覽所有內容以便使用CoreLocation服務(以及其他服務)。 這絕對不適合膽小的人。

在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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM