¿Cómo accedo a la brújula del iPhone en Firemonkey?¿Cómo accedo a la brújula en iOS?
Respuesta
He aquí un video howto: http://blogs.embarcadero.com/ao/2011/10/13/39171
código fuente completo: http://cc.embarcadero.com/item/28536
Y una (corta) Artículo: http://edn.embarcadero.com/article/41715
Y aquí está el código fuente de un componente de la brújula.
No lo he probado todavía, pero debería funcionar.
unit Compass;
{Based on Anders Ohlsson Firemonkey Compass example}
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$modeswitch objectivec1}
{$ENDIF}
interface
uses
SysUtils, Classes, FMX_Types
{$IFDEF FPC}
, iPhoneAll
{$ENDIF}
;
type
TUpdateEvent = TNotifyEvent;
TiOSGPSCompass = class(TFmxObject)
private
FLatitude: Double;
FLongitude: Double;
FAltitude: Double;
FHeading: Double;
FOnUpdate: TUpdateEvent;
UpdateNeeded: Boolean;
protected
procedure SetLatitude(value: Double);
procedure SetLongitude(value: Double);
procedure SetAltitude(value: Double);
procedure SetHeading(value: Double);
procedure Update;
public
constructor Create(AOwner: Classes.TComponent); override;
destructor Destroy; override;
published
property Latitude: Double read FLatitude;
property Longitude: Double read FLongitude;
property Altitude: Double read FAltitude;
property Heading: Double read FHeading;
property OnUpdate: TUpdateEvent read FOnUpdate write FOnUpdate;
end;
var
MyGPSCompass: TiOSGPSCompass = nil;
procedure Register;
implementation
{$IFDEF FPC}
uses
CoreLocation;
{$ENDIF}
{$IFDEF FPC}
type
MyCLController = objcclass(NSObject)
locationManager : CLLocationManager;
procedure locationManager_didUpdateToLocation_fromLocation(manager: CLLocationManager; newLocation, oldLocation: CLLocation); message 'locationManager:didUpdateToLocation:fromLocation:';
procedure locationManager_didUpdateHeading(manager: CLLocationManager; newHeading: CLHeading); message 'locationManager:didUpdateHeading:';
end;
var
Controller : MyCLController;
{$ENDIF}
{$IFDEF FPC}
procedure MyCLController.locationManager_didUpdateToLocation_fromLocation(manager: CLLocationManager; newLocation, oldLocation: CLLocation);
begin
if Assigned(MyGPSCompass) then begin
MyGPSCompass.SetLatitude(newLocation.coordinate.latitude);
MyGPSCompass.SetLongitude(newLocation.coordinate.longitude);
MyGPSCompass.SetAltitude(newLocation.altitude);
MyGPSCompass.Update;
end;
end;
{$ENDIF}
{$IFDEF FPC}
procedure MyCLController.locationManager_didUpdateHeading(manager: CLLocationManager; newHeading: CLHeading);
begin
if Assigned(MyGPSCompass) then begin
MyGPSCompass.FCompassHeading:= newHeading.magneticheading;
MyGPSCompass.Update;
end;
end;
{$ENDIF}
constructor TiOSGPSCompass.Create(AOwner: TComponent);
begin
inherited;
{$IFDEF FPC}
Controller := MyCLController.alloc.init;
Controller.locationManager := CLLocationManager.alloc.init;
Controller.locationManager.setDelegate(Controller);
Controller.locationManager.setDesiredAccuracy(kCLLocationAccuracyBestForNavigation);
Controller.locationManager.startUpdatingLocation;
Controller.locationManager.startUpdatingHeading;
{$ENDIF}
MyGPSCompass:= Self;
end;
destructor TiOSGPSCompass.Destroy;
begin
{$IFDEF FPC}
Controller.locationManager.release;
Controller.release;
{$ENDIF}
inherited;
end;
procedure TiOSGPSCompass.SetLatitude(value: Double);
begin
if (FLatitude <> value) then begin
FLatitude:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.SetLongitude(value: Double);
begin
if (FLongitude <> value) then begin
FLongitude:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.SetAltitude(value: Double);
begin
if (FAltitude <> value) then begin
FAltitude:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.SetHeading(value: Double);
begin
if (FHeading <> value) then begin
FHeading:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.Update;
begin
if (UpdateNeeded and Assigned(OnUpdate)) then OnUpdate(Self);
UpdateNeeded:= False;
end;
procedure Register;
begin
RegisterComponents('iOS', [TiOSGPSCompass]);
end;
end.
+1 Sería bueno, sin embargo, tener las partes relevantes incluidas en tu respuesta si esto es posible. – jpfollenius
@Smasher, veré lo que puedo hacer. – Johan
@Smasher, código fuente agregado para un componente brújula – Johan
- 1. ¿Cómo mostrar la brújula en la pantalla?
- 2. iOS realidad aumentada con brújula y ubicación
- 3. iOS: Creación de una brújula 3D
- 4. ¿Cómo accedo a la solicitud HTTP?
- 5. ¿Cómo accedo a directorios especiales en Windows?
- 6. ¿Cómo accedo a Java nativo en freemarker?
- 7. ¿Cómo accedo a HttpContext.Current en Task.Factory.StartNew?
- 8. Cómo obtener la dirección de la brújula
- 9. Señalar con la brújula
- 10. ¿Cómo accedo a la cámara en teléfonos con Android?
- 11. ¿Cómo accedo a la cámara web en una MacBook?
- 12. Usar una brújula iOS nativa dentro de una aplicación
- 13. ¿Cómo accedo a ViewBag desde JS
- 14. ¿Cómo accedo a SQLite desde VBA?
- 15. ¿Cómo accedo a los elementos del diccionario?
- 16. ¿Cómo accedo a un iframe de CasperJS?
- 17. ¿Cómo accedo a Locale desde un JSP?
- 18. ¿Cómo accedo a ModelState desde un ActionFilter?
- 19. ¿Cómo accedo a ListView desde el adaptador?
- 20. Cómo accedo a un archivo compartido programáticamente
- 21. Deserializando XML, ¿cómo accedo a los atributos?
- 22. ¿Cómo accedo a mi clave pública SSH?
- 23. ¿Cómo accedo a la memoria caché de plantillas? - Django
- 24. ¿Cómo accedo a la función Twig path() desde un controlador?
- 25. Cómo hacer una brújula precisa en Android
- 26. ¿Cómo accedo a la GUI (GTK) desde varios subprocesos?
- 27. Brújula: de 359 a 0 grados
- 28. Brújula spriting
- 29. ¿Está disponible el botón de encabezado Ubicación actual/brújula en la sdk de iOS?
- 30. Cómo mostrar la dirección del viento en una brújula
No entiendo, esto es algo así como: pregunto, doy la respuesta? – RBA
@RBA, solo compartiendo mi marcador. Espero que sea útil. SO lo permite, consulte las preguntas frecuentes. – Johan
De hecho :) tienes razón, esta fue la razón para darte un +1. En mi humilde opinión, esto también debería ser puesto en wiki porque es una buena pregunta sobre el desarrollo de iOS. – RBA