You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
8.5 KiB
Objective-C
281 lines
8.5 KiB
Objective-C
//
|
|
// BMFAnnotationHandles.m
|
|
// flutter_bmfmap
|
|
//
|
|
// Created by zhangbaojin on 2020/2/11.
|
|
//
|
|
|
|
#import "BMFAnnotationHandles.h"
|
|
#import "BMFMapView.h"
|
|
#import "NSObject+BMFVerify.h"
|
|
#import "BMFAnnotationMethodConst.h"
|
|
#import "BMFFileManager.h"
|
|
#import "UIColor+BMFString.h"
|
|
#import "BMFAnnotation.h"
|
|
#import "BMFMapModels.h"
|
|
|
|
@interface BMFAnnotationHandles ()
|
|
{
|
|
NSDictionary *_handles;
|
|
}
|
|
@end
|
|
@implementation BMFAnnotationHandles
|
|
|
|
static BMFAnnotationHandles *_instance = nil;
|
|
+ (instancetype)defalutCenter{
|
|
if (!_instance) {
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
_instance = [[BMFAnnotationHandles alloc] init];
|
|
});
|
|
}
|
|
return _instance;
|
|
}
|
|
|
|
- (NSDictionary<NSString *, NSString *> *)annotationHandles{
|
|
if (!_handles) {
|
|
_handles = @{
|
|
kBMFMapAddMarkerMethod: NSStringFromClass([BMFAddAnnotation class]),
|
|
kBMFMapAddMarkersMethod: NSStringFromClass([BMFAddAnnotations class]),
|
|
kBMFMapRemoveMarkerMethod: NSStringFromClass([BMFRemoveAnnotation class]),
|
|
kBMFMapRemoveMarkersMethod: NSStringFromClass([BMFRemoveAnnotations class]),
|
|
kBMFMapCleanAllMarkersMethod: NSStringFromClass([BMFCleanAllAnnotations class]),
|
|
kBMFMapUpdateMarkerMemberMethod: NSStringFromClass([BMFUpdateAnnotation class])
|
|
};
|
|
}
|
|
return _handles;
|
|
}
|
|
@end
|
|
|
|
#pragma mark - marker
|
|
|
|
@implementation BMFAddAnnotation
|
|
|
|
@synthesize _mapView;
|
|
|
|
- (nonnull NSObject<BMFMapViewHandler> *)initWith:(nonnull BMFMapView *)mapView {
|
|
_mapView = mapView;
|
|
return self;
|
|
}
|
|
|
|
- (void)handleMethodCall:(nonnull FlutterMethodCall *)call result:(nonnull FlutterResult)result {
|
|
BMKPointAnnotation *annotation = [BMKPointAnnotation annotationWith:call.arguments];
|
|
if (annotation) {
|
|
[_mapView addAnnotation:annotation];
|
|
result(@YES);
|
|
} else {
|
|
result(@NO);
|
|
}
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation BMFAddAnnotations
|
|
|
|
@synthesize _mapView;
|
|
|
|
- (nonnull NSObject<BMFMapViewHandler> *)initWith:(nonnull BMFMapView *)mapView {
|
|
_mapView = mapView;
|
|
return self;
|
|
}
|
|
|
|
- (void)handleMethodCall:(nonnull FlutterMethodCall *)call result:(nonnull FlutterResult)result {
|
|
if (!call.arguments) {
|
|
result(@NO);
|
|
return;
|
|
}
|
|
|
|
NSMutableArray *annotations = @[].mutableCopy;
|
|
for (NSDictionary *dic in (NSArray *)call.arguments) {
|
|
BMKPointAnnotation *an = [BMKPointAnnotation annotationWith:dic];
|
|
[annotations addObject:an];
|
|
}
|
|
[_mapView addAnnotations:annotations];
|
|
result(@YES);
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation BMFRemoveAnnotation
|
|
|
|
@synthesize _mapView;
|
|
|
|
- (nonnull NSObject<BMFMapViewHandler> *)initWith:(nonnull BMFMapView *)mapView {
|
|
_mapView = mapView;
|
|
return self;
|
|
}
|
|
|
|
- (void)handleMethodCall:(nonnull FlutterMethodCall *)call result:(nonnull FlutterResult)result {
|
|
if (!call.arguments || ![call.arguments safeObjectForKey:@"id"]) {
|
|
result(@NO);
|
|
return;
|
|
}
|
|
NSString *ID = [call.arguments safeObjectForKey:@"id"];
|
|
__weak __typeof__(_mapView) weakMapView = _mapView;
|
|
[_mapView.annotations enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
if ([ID isEqualToString:((BMKPointAnnotation *) obj).Id]) {
|
|
[weakMapView removeAnnotation:obj];
|
|
result(@YES);
|
|
*stop = YES;
|
|
}
|
|
}];
|
|
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation BMFRemoveAnnotations
|
|
|
|
@synthesize _mapView;
|
|
|
|
- (nonnull NSObject<BMFMapViewHandler> *)initWith:(nonnull BMFMapView *)mapView {
|
|
_mapView = mapView;
|
|
return self;
|
|
}
|
|
|
|
- (void)handleMethodCall:(nonnull FlutterMethodCall *)call result:(nonnull FlutterResult)result {
|
|
if (!call.arguments) {
|
|
result(@NO);
|
|
return;
|
|
}
|
|
|
|
__block NSMutableArray <BMKPointAnnotation*> *annotations = @[].mutableCopy;
|
|
for (NSDictionary *dic in (NSArray *)call.arguments) {
|
|
[_mapView.annotations enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
if ([[dic safeObjectForKey:@"id"] isEqualToString:((BMKPointAnnotation *) obj).Id]) {
|
|
[annotations addObject:obj];
|
|
*stop = YES;
|
|
}
|
|
}];
|
|
}
|
|
[_mapView removeAnnotations:annotations];
|
|
result(@YES);
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation BMFCleanAllAnnotations
|
|
|
|
@synthesize _mapView;
|
|
|
|
- (nonnull NSObject<BMFMapViewHandler> *)initWith:(nonnull BMFMapView *)mapView {
|
|
_mapView = mapView;
|
|
return self;
|
|
}
|
|
|
|
- (void)handleMethodCall:(nonnull FlutterMethodCall *)call result:(nonnull FlutterResult)result {
|
|
[_mapView removeAnnotations:_mapView.annotations];
|
|
result(@YES);
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation BMFUpdateAnnotation
|
|
|
|
@synthesize _mapView;
|
|
|
|
- (nonnull NSObject<BMFMapViewHandler> *)initWith:(nonnull BMFMapView *)mapView {
|
|
_mapView = mapView;
|
|
return self;
|
|
}
|
|
|
|
- (void)handleMethodCall:(nonnull FlutterMethodCall *)call result:(nonnull FlutterResult)result {
|
|
if (!call.arguments || ![call.arguments safeObjectForKey:@"id"]) {
|
|
result(@NO);
|
|
return;
|
|
}
|
|
NSString *ID = [call.arguments safeObjectForKey:@"id"];
|
|
__block BMKPointAnnotation *annotation;
|
|
// __weak __typeof__(_mapView) weakMapView = _mapView;
|
|
[_mapView.annotations enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
if ([ID isEqualToString:((BMKPointAnnotation *) obj).Id]) {
|
|
annotation = (BMKPointAnnotation *) obj;
|
|
*stop = YES;
|
|
}
|
|
}];
|
|
if (!annotation) {
|
|
NSLog(@"根据ID(%@)未找到对应的marker", ID);
|
|
result(@NO);
|
|
}
|
|
|
|
NSString *member = [call.arguments safeObjectForKey:@"member"];
|
|
|
|
if ([member isEqualToString:@"title"]) {
|
|
annotation.title = [call.arguments safeObjectForKey:@"value"];
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"subtitle"]) {
|
|
annotation.subtitle = [call.arguments safeObjectForKey:@"value"];
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"position"]) {
|
|
BMFCoordinate *coord = [BMFCoordinate bmf_modelWith:[call.arguments safeObjectForKey:@"value"]];
|
|
annotation.coordinate = [coord toCLLocationCoordinate2D];
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"isLockedToScreen"]) {
|
|
annotation.isLockedToScreen = [[call.arguments safeObjectForKey:@"value"] boolValue];
|
|
if (annotation.isLockedToScreen) {
|
|
annotation.screenPointToLock = [[BMFMapPoint bmf_modelWith:[call.arguments safeObjectForKey:@"screenPointToLock"]] toCGPoint];
|
|
}
|
|
[_mapView setMapStatus:_mapView.getMapStatus];
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"icon"]) {
|
|
BMKPinAnnotationView *view = (BMKPinAnnotationView *)[_mapView viewForAnnotation:annotation];
|
|
view.image = [UIImage imageWithContentsOfFile:[[BMFFileManager defaultCenter] pathForFlutterImageName:[call.arguments safeObjectForKey:@"value"]]];
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"centerOffset"]) {
|
|
BMKPinAnnotationView *view = (BMKPinAnnotationView *)[_mapView viewForAnnotation:annotation];
|
|
BMFMapPoint *point = [BMFMapPoint bmf_modelWith:[call.arguments safeObjectForKey:@"value"]];
|
|
view.centerOffset = [point toCGPoint];
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"enabled3D"]) {
|
|
BMKPinAnnotationView *view = (BMKPinAnnotationView *)[_mapView viewForAnnotation:annotation];
|
|
BOOL value = [[call.arguments safeObjectForKey:@"value"] boolValue];
|
|
view.enabled3D = value;
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"enabled"]) {
|
|
BMKPinAnnotationView *view = (BMKPinAnnotationView *)[_mapView viewForAnnotation:annotation];
|
|
BOOL value = [[call.arguments safeObjectForKey:@"value"] boolValue];
|
|
view.enabled = value;
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"draggable"]) {
|
|
BMKPinAnnotationView *view = (BMKPinAnnotationView *)[_mapView viewForAnnotation:annotation];
|
|
BOOL value = [[call.arguments safeObjectForKey:@"value"] boolValue];
|
|
view.draggable = value;
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"zIndex"]) {
|
|
NSLog(@"ios - 暂不支持设置zIndex");
|
|
result(@YES);
|
|
return;
|
|
|
|
} else if ([member isEqualToString:@"visible"]) {
|
|
NSLog(@"ios - 暂不支持设置visible");
|
|
result(@YES);
|
|
return;
|
|
|
|
} else {
|
|
result(@YES);
|
|
}
|
|
|
|
}
|
|
|
|
@end
|