测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2016年7月 |
由 Denis Bogatyrev 维护。
此组件允许您从 MKMapView 中选择圆形地图区域。
要将 DBMapSelectorViewController 手动添加到您的项目中
git clone
下载最新代码Source
文件夹的整个内容拖到您的项目中(确保在从项目外部提取代码存档时选择复制项目)要在您的项目中使用 DBMapSelectorViewController,您应执行以下步骤
...
// (1)
#import "DBMapSelectorManager.h"
@interface ViewController () <DBMapSelectorManagerDelegate>
@property (nonatomic, strong) DBMapSelectorManager *mapSelectorManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// (2)
self.mapSelectorManager = [[DBMapSelectorManager alloc] initWithMapView:self.mapView];
self.mapSelectorManager.delegate = self;
// (3)
self.mapSelectorManager.circleCoordinate = CLLocationCoordinate2DMake(55.75399400, 37.62209300);
self.mapSelectorManager.circleRadius = 3000;
[self.mapSelectorManager applySelectorSettings];
}
...
// (4)
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
return [self.mapSelectorManager mapView:mapView viewForAnnotation:annotation];
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState {
[self.mapSelectorManager mapView:mapView annotationView:annotationView didChangeDragState:newState fromOldState:oldState];
}
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay {
return [self.mapSelectorManager mapView:mapView rendererForOverlay:overlay];
}
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
[self.mapSelectorManager mapView:mapView regionDidChangeAnimated:animated];
}
@end
您可以更改额外的 MapSelector 属性。完整的属性列表如下所示
DBMapSelectorEditingType editingType
- 用于指定选择器编辑类型。属性可以是以下四个值之一DBMapSelectorEditingTypeFull
允许编辑坐标和半径,DBMapSelectorEditingTypeCoordinateOnly
允许仅编辑坐标,DBMapSelectorEditingTypeRadiusOnly
允许仅编辑半径,DBMapSelectorEditingTypeNone
只读模式;CLLocationCoordinate2D circleCoordinate
- 用于指定选择器坐标;CLLocationDistance circleRadius
- 用于指定选择器半径。默认为 1000 米;CLLocationDistance circleRadiusMin
- 用于指定选择器的最小半径。默认为 100 米;CLLocationDistance circleRadiusMax
- 用于指定选择器的最大半径。默认为 10000 米;BOOL hidden
- 用于隐藏或显示选择器。默认为 NO;BOOL fillInside
- 用于在内部或外部填充之间切换;UIColor *fillColor
- 用于指定选择器填充颜色。颜色用于填充圆形地图区域;UIColor *strokeColor
- 用来指定选择器边框的颜色。颜色用于定义圆形地图区域;CGFloat mapRegionCoef
- 用来指定地图区域放大因子。此参数会影响选择器设置改变后地图区域的显示。建议设置一个大于1.f的值;BOOL shouldShowRadiusText
- 表示是否显示半径文本;BOOL shouldLongPressGesture
- 允许通过长按手势将选择器移动到新位置。要能够在选择器的主要属性(坐标和半径)发生改变时做出反应,您必须成为DBMapSelectorManager的代理。在这里可以看到DBMapSelectorManagerDelegate协议;
@protocol DBMapSelectorManagerDelegate <NSObject>
@optional
- (void)mapSelectorManager:(DBMapSelectorManager *)mapSelectorManager didChangeCoordinate:(CLLocationCoordinate2D)coordinate;
- (void)mapSelectorManager:(DBMapSelectorManager *)mapSelectorManager didChangeRadius:(CLLocationDistance)radius;
- (void)mapSelectorManagerWillBeginHandlingUserInteraction:(DBMapSelectorManager *)mapSelectorManager;
- (void)mapSelectorManagerDidHandleUserInteraction:(DBMapSelectorManager *)mapSelectorManager;
@end
您可以在您的《MyViewController》类中实现这些方法以对这些更改做出反应。例如,以下是如何实现的方法
- (void)mapSelectorManager:(DBMapSelectorManager *)mapSelectorManager didChangeCoordinate:(CLLocationCoordinate2D)coordinate {
_coordinateLabel.text = [NSString stringWithFormat:@"Coordinate = {%.5f, %.5f}", coordinate.latitude, coordinate.longitude];
}
- (void)mapSelectorManager:(DBMapSelectorManager *)mapSelectorManager didChangeRadius:(CLLocationDistance)radius {
NSString *radiusStr = (radius >= 1000) ? [NSString stringWithFormat:@"%.1f km", radius * .001f] : [NSString stringWithFormat:@"%.0f m", radius];
_radiusLabel.text = [@"Radius = " stringByAppendingString:radiusStr];
}
BOOL shouldLongPressGesture
。允许通过长按手势将选择器移动到新位置。CGFloat mapRegionCoef
。在改变选择器设置后,用于地图区域的放大因子。建议设置一个大于1.f的值。Denis Bogatyrev(维护者)
DBMapSelectorViewController - 版权所有 (c) 2015 Denis Bogatyrev
任何人未经许可,免费获得本软件和相关的文档副本(“软件”),都可以根据以下条件在软件上取得专有使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可、出售软件副本,并允许软件的提供者进行上述行为,前提是
上述版权声明和本许可声明应包含在软件的任何副本或主要部分。
软件按“现状”提供,不提供任何形式,明示或暗示的保证,包括但不限于适销性、适用于特定目的和非侵权性保证。在任何事件中,包括但不限于合同、侵权或其他行为,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是否存在软件或软件的使用或与之相关的任何行为。