¿Cómo accedo al acelerómetro en iOS usando Delphi XE2?¿Cómo acceder al acelerómetro iOS en Delphi XE2?
Intenté buscar en el IDE pero no encontré ningún componente.
¿Cómo accedo al acelerómetro en iOS usando Delphi XE2?¿Cómo acceder al acelerómetro iOS en Delphi XE2?
Intenté buscar en el IDE pero no encontré ningún componente.
Delphi XE2 admite la implementación de OSX en un mac. La implementación en un iPhone es apparently pretty easy, pero todavía implica el uso de XCode como una herramienta de implementación final. Dado que Delphi no admite "oficialmente" la implementación en el hardware de iPhone, dudo que hayan incluido ningún componente que sea específico para él.
Descargo de responsabilidad: Acabo de descargar XE2 hace unas horas, y hasta ahora solo he implementado una aplicación mac (y funcionó muy bien). Así que estoy lejos de ser un experto.
Editar: Anders Ohlsson aparentemente ha escrito un componente de acelerómetro para XE2. No lo he intentado, pero here it is.
Joseph tiene razón. Philip Hess ha estado contribuyendo a los grupos de noticias Delphi iOS, y otra información útil, por ejemplo:
https://forums.embarcadero.com/message.jspa?messageID=390713&tstart=125
Él también tiene esta página, aquí:
http://web.me.com/macpgmr/ObjP/Xcode4/ObjP_Intro.html
que puede ser útil para usted . Actualmente estoy abriéndolo todo para usar los servicios de CoreLocation (entre otros). Definitivamente no es para los débiles de corazón.
Hay un componente que lee el acelerómetro en el blog Embarcadero:
http://edn.embarcadero.com/article/41748
Aquí está el enlace de descarga para el componente: http://cc.embarcadero.com/item/28609
Y aquí está el código fuente de Anders Ohlsson:
(He utilizado este a construir un componente para el GPS/Brújula).
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.
Curiose el downvote. Si me equivoco sobre esto, me encantaría saber cuál es la forma correcta. Algún tipo de acceso de hardware iOS simulado directo desde Delphi en Windows sería un verdadero placer. – JosephStyons
He incluido el código fuente a continuación y he usado la plantilla para escribir un componente para la brújula/GPS iOS. – Johan