Come si accede all'accelerometro in iOS utilizzando Delphi XE2?Come accedere all'accelerometro iOS in Delphi XE2?
Ho provato a cercare attraverso l'IDE ma non ho trovato un componente.
Come si accede all'accelerometro in iOS utilizzando Delphi XE2?Come accedere all'accelerometro iOS in Delphi XE2?
Ho provato a cercare attraverso l'IDE ma non ho trovato un componente.
Delphi XE2 supporta la distribuzione su OSX su un Mac. La distribuzione su un iPhone è apparently pretty easy, ma implica ancora l'utilizzo di XCode come strumento di distribuzione finale. Dal momento che Delphi non supporta "ufficialmente" la distribuzione su hardware iPhone, dubito che abbiano incluso tutti i componenti specifici.
Disclaimer: Ho appena scaricato XE2 poche ore fa e ho distribuito un'applicazione mac finora (e ha funzionato magnificamente). Quindi sono lontano da un esperto.
Modifica: Anders Ohlsson ha apparentemente scritto un componente accelerometro per XE2. Non l'ho provato, ma here it is.
Joseph è corretto. Philip Hess ha contribuito ai newsgroup Delphi iOS, e altre informazioni utili, ad esempio:
https://forums.embarcadero.com/message.jspa?messageID=390713&tstart=125
Ha anche questa pagina, qui:
http://web.me.com/macpgmr/ObjP/Xcode4/ObjP_Intro.html
che può essere utile a voi . Attualmente sto superando tutto per poter utilizzare i servizi di CoreLocation (tra gli altri). Non è sicuramente per i deboli di cuore.
C'è una componente che legge l'accelerometro sul blog Embarcadero:
http://edn.embarcadero.com/article/41748
Ecco il link per scaricare il componente: http://cc.embarcadero.com/item/28609
Ed ecco il codice sorgente da Anders Ohlsson:
(io ho usato questo per costruire un componente per il GPS/bussola).
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.
Curioso per il downvote. Se mi sbaglio, mi piacerebbe sapere qual è la via giusta. Una sorta di accesso hardware iOS simulato diretto da Delphi su Windows sarebbe una vera sorpresa. – JosephStyons
Ho incluso il codice sorgente qui sotto e ho usato il modello per scrivere un componente per la bussola/GPS iOS. – Johan