Commit 3a4d6937 authored by 7c00's avatar 7c00

优化 iOS 导航代码

parent 4f47386b
#import <React/RCTUIManager.h> #import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviDriveView.h> #import <AMapNaviKit/AMapNaviDriveView.h>
#import <AMapNaviKit/AMapNaviDriveManager.h> #import <AMapNaviKit/AMapNaviDriveManager.h>
#import "AMapNavigationManager.h"
#import "AMapDrive.h" #import "AMapDrive.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapDriveManager : RCTViewManager <AMapNaviDriveManagerDelegate> @interface AMapDriveManager : RCTViewManager <AMapNaviDriveManagerDelegate>
+ (AMapDrive *)driveView; + (AMapDrive *)navigationView;
+ (AMapNaviDriveManager *)driveManager; + (AMapNaviDriveManager *)navigationManager;
@end @end
@implementation AMapDriveManager { @implementation AMapDriveManager {
AMapDrive *_driveView; AMapDrive *_navigationView;
AMapNaviDriveManager *_driveManager; AMapNaviDriveManager *_navigationManager;
}
- (instancetype)init {
if (self = [super init]) {
_driveView = [AMapDriveManager driveView];
_driveManager = [AMapDriveManager driveManager];
_driveManager.delegate = self;
}
return self;
} }
RCT_EXPORT_MODULE() INIT(AMapDriveManager)
NAVIGATION_VIEW(AMapDrive)
NAVIGATION_MANAGER(AMapDriveManager, AMapNaviDriveManager)
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock) RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock) start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start end:(AMapNaviPoint *)end way:(NSArray<AMapNaviPoint *> *)way) { way:(NSArray<AMapNaviPoint *> *)way) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { [_navigationManager calculateDriveRouteWithStartPoints:@[start]
[_driveManager calculateDriveRouteWithStartPoints:@[start] endPoints:@[end]
endPoints:@[end] wayPoints:way
wayPoints:nil drivingStrategy:AMapNaviDrivingStrategySingleDefault];
drivingStrategy:AMapNaviDrivingStrategySingleDefault];
}];
}
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_driveManager startGPSNavi];
}];
}
- (UIView *)view {
return _driveView;
} }
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager { - (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager {
if (_driveView.onCalculateRouteSuccess) { if (_navigationView.onCalculateRouteSuccess) {
_driveView.onCalculateRouteSuccess(nil); _navigationView.onCalculateRouteSuccess(nil);
} }
} }
- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error { - (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error {
if (_driveView.onCalculateRouteFailure) { if (_navigationView.onCalculateRouteFailure) {
_driveView.onCalculateRouteFailure(@{ _navigationView.onCalculateRouteFailure(@{
@"code": @(error.code), @"code": @(error.code),
}); });
} }
} }
+ (AMapNaviDriveManager *)driveManager {
static AMapNaviDriveManager *driveManager;
if (driveManager == nil) {
driveManager = [AMapNaviDriveManager new];
[driveManager addDataRepresentative:[AMapDriveManager driveView]];
}
return driveManager;
}
+ (AMapDrive *)driveView {
static AMapDrive *driveView;
if (driveView == nil) {
driveView = [AMapDrive new];
}
return driveView;
}
@end @end
#define INIT(clazz) \
- (instancetype)init { \
if (self = [super init]) { \
_navigationView = [clazz navigationView]; \
_navigationManager = [clazz navigationManager]; \
_navigationManager.delegate = self; \
} \
return self; \
} \
\
- (UIView *)view { \
return _navigationView; \
} \
\
RCT_EXPORT_MODULE() \
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock) \
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock) \
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) { \
[_navigationManager startGPSNavi]; \
} \
#define NAVIGATION_VIEW(type) \
+ (type *)navigationView { \
static type *view; \
if (view == nil) view = [type new]; \
return view; \
} \
#define NAVIGATION_MANAGER(clazz, type) \
+ (type *)navigationManager { \
static type *manager; \
if (manager == nil) { \
manager = [type new]; \
[manager addDataRepresentative:[clazz navigationView]]; \
} \
return manager; \
} \
#import <React/RCTUIManager.h> #import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviRideView.h> #import <AMapNaviKit/AMapNaviRideView.h>
#import <AMapNaviKit/AMapNaviRideManager.h> #import <AMapNaviKit/AMapNaviRideManager.h>
#import "AMapNavigationManager.h"
#import "AMapRide.h" #import "AMapRide.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection" #pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapRideManager : RCTViewManager <AMapNaviRideManagerDelegate> @interface AMapRideManager : RCTViewManager <AMapNaviRideManagerDelegate>
+ (AMapRide *)rideView; + (AMapRide *)navigationView;
+ (AMapNaviRideManager *)rideManager; + (AMapNaviRideManager *)navigationManager;
@end @end
@implementation AMapRideManager { @implementation AMapRideManager {
AMapRide *_rideView; AMapRide *_navigationView;
AMapNaviRideManager *_rideManager; AMapNaviRideManager *_navigationManager;
} }
- (instancetype)init { INIT(AMapRideManager)
if (self = [super init]) { NAVIGATION_VIEW(AMapRide)
_rideView = [AMapRideManager rideView]; NAVIGATION_MANAGER(AMapRideManager, AMapNaviRideManager)
_rideManager = [AMapRideManager rideManager];
_rideManager.delegate = self;
}
return self;
}
RCT_EXPORT_MODULE()
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start end:(AMapNaviPoint *)end) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_rideManager calculateRideRouteWithStartPoint:start
endPoint:end];
}];
}
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_rideManager startGPSNavi];
}];
}
- (UIView *)view { RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
return _rideView; start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateRideRouteWithStartPoint:start endPoint:end];
} }
- (void)rideManagerOnCalculateRouteSuccess:(AMapNaviRideManager *)rideManager { - (void)rideManagerOnCalculateRouteSuccess:(AMapNaviRideManager *)rideManager {
if (_rideView.onCalculateRouteSuccess) { if (_navigationView.onCalculateRouteSuccess) {
_rideView.onCalculateRouteSuccess(nil); _navigationView.onCalculateRouteSuccess(nil);
} }
} }
- (void)rideManager:(AMapNaviRideManager *)rideManager onCalculateRouteFailure:(NSError *)error { - (void)rideManager:(AMapNaviRideManager *)rideManager onCalculateRouteFailure:(NSError *)error {
if (_rideView.onCalculateRouteFailure) { if (_navigationView.onCalculateRouteFailure) {
_rideView.onCalculateRouteFailure(@{ _navigationView.onCalculateRouteFailure(@{
@"code": @(error.code), @"code": @(error.code),
}); });
} }
} }
+ (AMapNaviRideManager *)rideManager {
static AMapNaviRideManager *rideManager;
if (rideManager == nil) {
rideManager = [AMapNaviRideManager new];
[rideManager addDataRepresentative:[AMapRideManager rideView]];
}
return rideManager;
}
+ (AMapRide *)rideView {
static AMapRide *rideView;
if (rideView == nil) {
rideView = [AMapRide new];
}
return rideView;
}
@end @end
#import <React/RCTUIManager.h> #import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviWalkView.h> #import <AMapNaviKit/AMapNaviWalkView.h>
#import <AMapNaviKit/AMapNaviWalkManager.h> #import <AMapNaviKit/AMapNaviWalkManager.h>
#import "AMapNavigationManager.h"
#import "AMapWalk.h" #import "AMapWalk.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection" #pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapWalkManager : RCTViewManager <AMapNaviWalkManagerDelegate> @interface AMapWalkManager : RCTViewManager <AMapNaviWalkManagerDelegate>
+ (AMapWalk *)walkView; + (AMapWalk *)navigationView;
+ (AMapNaviWalkManager *)walkManager; + (AMapNaviWalkManager *)navigationManager;
@end @end
@implementation AMapWalkManager { @implementation AMapWalkManager {
AMapWalk *_walkView; AMapWalk *_navigationView;
AMapNaviWalkManager *_walkManager; AMapNaviWalkManager *_navigationManager;
} }
- (instancetype)init { INIT(AMapWalkManager)
if (self = [super init]) { NAVIGATION_VIEW(AMapWalk)
_walkView = [AMapWalkManager walkView]; NAVIGATION_MANAGER(AMapWalkManager, AMapNaviWalkManager)
_walkManager = [AMapWalkManager walkManager];
_walkManager.delegate = self;
}
return self;
}
RCT_EXPORT_MODULE()
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start end:(AMapNaviPoint *)end) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_walkManager calculateWalkRouteWithStartPoints:@[start]
endPoints:@[end]];
}];
}
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_walkManager startGPSNavi];
}];
}
- (UIView *)view { RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
return _walkView; start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateWalkRouteWithStartPoints:@[start] endPoints:@[end]];
} }
- (void)walkManagerOnCalculateRouteSuccess:(AMapNaviWalkManager *)walkManager { - (void)walkManagerOnCalculateRouteSuccess:(AMapNaviWalkManager *)walkManager {
if (_walkView.onCalculateRouteSuccess) { if (_navigationView.onCalculateRouteSuccess) {
_walkView.onCalculateRouteSuccess(nil); _navigationView.onCalculateRouteSuccess(nil);
} }
} }
- (void)walkManager:(AMapNaviWalkManager *)walkManager onCalculateRouteFailure:(NSError *)error { - (void)walkManager:(AMapNaviWalkManager *)walkManager onCalculateRouteFailure:(NSError *)error {
if (_walkView.onCalculateRouteFailure) { if (_navigationView.onCalculateRouteFailure) {
_walkView.onCalculateRouteFailure(@{ _navigationView.onCalculateRouteFailure(@{
@"code": @(error.code), @"code": @(error.code),
}); });
} }
} }
+ (AMapNaviWalkManager *)walkManager {
static AMapNaviWalkManager *walkManager;
if (walkManager == nil) {
walkManager = [AMapNaviWalkManager new];
[walkManager addDataRepresentative:[AMapWalkManager walkView]];
}
return walkManager;
}
+ (AMapWalk *)walkView {
static AMapWalk *walkView;
if (walkView == nil) {
walkView = [AMapWalk new];
}
return walkView;
}
@end @end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment