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

优化 iOS 导航代码

parent 4f47386b
#import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviDriveView.h>
#import <AMapNaviKit/AMapNaviDriveManager.h>
#import "AMapNavigationManager.h"
#import "AMapDrive.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapDriveManager : RCTViewManager <AMapNaviDriveManagerDelegate>
+ (AMapDrive *)driveView;
+ (AMapNaviDriveManager *)driveManager;
+ (AMapDrive *)navigationView;
+ (AMapNaviDriveManager *)navigationManager;
@end
@implementation AMapDriveManager {
AMapDrive *_driveView;
AMapNaviDriveManager *_driveManager;
}
- (instancetype)init {
if (self = [super init]) {
_driveView = [AMapDriveManager driveView];
_driveManager = [AMapDriveManager driveManager];
_driveManager.delegate = self;
}
return self;
AMapDrive *_navigationView;
AMapNaviDriveManager *_navigationManager;
}
RCT_EXPORT_MODULE()
INIT(AMapDriveManager)
NAVIGATION_VIEW(AMapDrive)
NAVIGATION_MANAGER(AMapDriveManager, AMapNaviDriveManager)
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 way:(NSArray<AMapNaviPoint *> *)way) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_driveManager calculateDriveRouteWithStartPoints:@[start]
endPoints:@[end]
wayPoints:nil
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;
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateDriveRouteWithStartPoints:@[start]
endPoints:@[end]
wayPoints:way
drivingStrategy:AMapNaviDrivingStrategySingleDefault];
}
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager {
if (_driveView.onCalculateRouteSuccess) {
_driveView.onCalculateRouteSuccess(nil);
if (_navigationView.onCalculateRouteSuccess) {
_navigationView.onCalculateRouteSuccess(nil);
}
}
- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error {
if (_driveView.onCalculateRouteFailure) {
_driveView.onCalculateRouteFailure(@{
if (_navigationView.onCalculateRouteFailure) {
_navigationView.onCalculateRouteFailure(@{
@"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
#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 <AMapNaviKit/AMapNaviRideView.h>
#import <AMapNaviKit/AMapNaviRideManager.h>
#import "AMapNavigationManager.h"
#import "AMapRide.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapRideManager : RCTViewManager <AMapNaviRideManagerDelegate>
+ (AMapRide *)rideView;
+ (AMapNaviRideManager *)rideManager;
+ (AMapRide *)navigationView;
+ (AMapNaviRideManager *)navigationManager;
@end
@implementation AMapRideManager {
AMapRide *_rideView;
AMapNaviRideManager *_rideManager;
AMapRide *_navigationView;
AMapNaviRideManager *_navigationManager;
}
- (instancetype)init {
if (self = [super init]) {
_rideView = [AMapRideManager rideView];
_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];
}];
}
INIT(AMapRideManager)
NAVIGATION_VIEW(AMapRide)
NAVIGATION_MANAGER(AMapRideManager, AMapNaviRideManager)
- (UIView *)view {
return _rideView;
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateRideRouteWithStartPoint:start endPoint:end];
}
- (void)rideManagerOnCalculateRouteSuccess:(AMapNaviRideManager *)rideManager {
if (_rideView.onCalculateRouteSuccess) {
_rideView.onCalculateRouteSuccess(nil);
if (_navigationView.onCalculateRouteSuccess) {
_navigationView.onCalculateRouteSuccess(nil);
}
}
- (void)rideManager:(AMapNaviRideManager *)rideManager onCalculateRouteFailure:(NSError *)error {
if (_rideView.onCalculateRouteFailure) {
_rideView.onCalculateRouteFailure(@{
if (_navigationView.onCalculateRouteFailure) {
_navigationView.onCalculateRouteFailure(@{
@"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
#import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviWalkView.h>
#import <AMapNaviKit/AMapNaviWalkManager.h>
#import "AMapNavigationManager.h"
#import "AMapWalk.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapWalkManager : RCTViewManager <AMapNaviWalkManagerDelegate>
+ (AMapWalk *)walkView;
+ (AMapNaviWalkManager *)walkManager;
+ (AMapWalk *)navigationView;
+ (AMapNaviWalkManager *)navigationManager;
@end
@implementation AMapWalkManager {
AMapWalk *_walkView;
AMapNaviWalkManager *_walkManager;
AMapWalk *_navigationView;
AMapNaviWalkManager *_navigationManager;
}
- (instancetype)init {
if (self = [super init]) {
_walkView = [AMapWalkManager walkView];
_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];
}];
}
INIT(AMapWalkManager)
NAVIGATION_VIEW(AMapWalk)
NAVIGATION_MANAGER(AMapWalkManager, AMapNaviWalkManager)
- (UIView *)view {
return _walkView;
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateWalkRouteWithStartPoints:@[start] endPoints:@[end]];
}
- (void)walkManagerOnCalculateRouteSuccess:(AMapNaviWalkManager *)walkManager {
if (_walkView.onCalculateRouteSuccess) {
_walkView.onCalculateRouteSuccess(nil);
if (_navigationView.onCalculateRouteSuccess) {
_navigationView.onCalculateRouteSuccess(nil);
}
}
- (void)walkManager:(AMapNaviWalkManager *)walkManager onCalculateRouteFailure:(NSError *)error {
if (_walkView.onCalculateRouteFailure) {
_walkView.onCalculateRouteFailure(@{
if (_navigationView.onCalculateRouteFailure) {
_navigationView.onCalculateRouteFailure(@{
@"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
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