Làm cách nào để truy cập la bàn iphone trong Firemonkey?Làm cách nào để truy cập la bàn trong iOS?
Trả lời
Dưới đây là một đoạn video howto: http://blogs.embarcadero.com/ao/2011/10/13/39171
mã nguồn đầy đủ: http://cc.embarcadero.com/item/28536
Và một (viết tắt) Bài chi tiết: http://edn.embarcadero.com/article/41715
Và đây là mã nguồn cho một thành phần la bàn.
Chưa thử, nhưng nó sẽ hoạt động.
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 Nó sẽ là tốt mặc dù, để có các phần có liên quan bao gồm trong câu trả lời của bạn nếu điều này là tất cả có thể. – jpfollenius
@Smasher, tôi sẽ xem những gì tôi có thể làm. – Johan
@Smasher, thêm mã nguồn cho thành phần la bàn – Johan
- 1. truy cập la bàn qua iPhone bằng JavaScript
- 2. iOS: Tạo một la bàn 3D
- 3. Làm cách nào để đọc la bàn trên Android?
- 4. Cách nhận hướng la bàn
- 5. Làm thế nào để cài đặt la bàn trong mac?
- 6. La bàn trong Android
- 7. Sử dụng la bàn iOS bản địa trong ứng dụng
- 8. iOS: Cách truy cập `UIKeyboard`?
- 9. Android: la bàn + khoảng cách trong danh sách xem
- 10. Di chuyển la bàn bản đồ google
- 11. Sass, La bàn và JavaScript
- 12. Trình mô phỏng iOS và XCode để mô phỏng La bàn?
- 13. Làm cách nào để hạ cấp xuống phiên bản la bàn cũ bằng cài đặt gem?
- 14. Làm thế nào để nhập tệp scss trong la bàn chỉ khi nó tồn tại?
- 15. Hướng dẫn la bàn đến đích GPS
- 16. Truy cập máy ảnh trong IOS Simulator
- 17. Làm thế nào để kết hợp la bàn với phước lành?
- 18. Ví dụ la bàn trên Android
- 19. La bàn nhiều chuyển đổi css
- 20. Tìm kiếm hoặc la bàn Hibernate
- 21. Làm cách nào để ứng dụng IOS truy cập các tệp trên Google Drive
- 22. Làm cách nào để truy cập tệp trong gói OSGi?
- 23. Làm cách nào để truy cập HttpContext.Current trong Task.Factory.StartNew?
- 24. Tôi làm cách nào để truy cập phiên trong webmethod?
- 25. Làm thế nào để truy cập vào gia tốc iOS trong Delphi XE2?
- 26. Thuật toán tiếng ồn la bàn Android
- 27. Làm thế nào để sử dụng bộ lọc La bàn mixin?
- 28. làm cách nào tôi có thể hiển thị la bàn/tiêu đề trên bản đồ mapkit
- 29. Tìm hướng trong iPhone như trong La bàn?
- 30. Cách tạo la bàn chính xác trên android
Tôi không hiểu, đây là một cái gì đó như: Tôi hỏi, tôi đưa ra câu trả lời? – RBA
@RBA, chỉ cần chia sẻ dấu trang của tôi. Hy vọng nó hữu ích. SO cho phép điều này, xem FAQ. – Johan
Thật vậy :) bạn hoàn toàn đúng, đây là lý do để cung cấp cho bạn +1. IMHO, điều này cũng cần phải được đặt trên wiki vì là một câu hỏi hay về phát triển iOS – RBA