相关文章推荐
玩篮球的日光灯  ·  Build the AWS SDK for ...·  7 月前    · 
玩篮球的日光灯  ·  Error using ...·  9 月前    · 
玩篮球的日光灯  ·  Back up and restore ...·  9 月前    · 
玩篮球的日光灯  ·  ISE- Queue Link Error ...·  10 月前    · 
满身肌肉的保温杯  ·  大疆DJI Air ...·  14 分钟前    · 
飘逸的热带鱼  ·  Spring Data JPA - ...·  35 分钟前    · 
玩足球的斑马  ·  System.Runtime.Interop ...·  45 分钟前    · 
更新时间:2020-06-23
地图控件

百度iOS地图SDK提供的控件有地图Logo、指南针、比例尺。
地图Logo

百度iOS地图SD 的 Logo 默认在左下角显示, 不可以移除,不允许遮挡。

1.改变地图Logo位置 百度iOS地图SD使用枚举类型控制显示的位置,共支持6个显示位置(左下,中下,右下,左上,中上,右上),改变地图Logo的位置的方法如下:

Objective-C
Swift
[_mapView setLogoPosition: BMKLogoPositionRightBottom];
mapView?.logoPosition = BMKLogoPositionRightBottom

2.避免地图Logo被UI遮挡的方法 可通过设置地图边界区域的方法来避免,如下代码:

Objective-C
Swift
/**
 *地图预留边界,默认:UIEdgeInsetsZero。
 *注:设置后,会根据mapPadding调整logo、比例尺、指南针的位置。
 *   当updateTargetScreenPtWhenMapPaddingChanged==YES时,地图中心(屏幕坐标:BMKMapStatus.targetScreenPt)跟着改变
[_mapView setMapPadding:UIEdgeInsetsMake(0, 0, 30, 0)];
*地图预留边界,默认:UIEdgeInsetsZero。 *注:设置后,会根据mapPadding调整logo、比例尺、指南针的位置。 * 当updateTargetScreenPtWhenMapPaddingChanged==YES时,地图中心(屏幕坐标:BMKMapStatus.targetScreenPt)跟着改变 mapView?.mapPadding = UIEdgeInsets.init(top: 0, left: 0, bottom: 30, right: 0)

指南针默认为隐藏状态,当地图旋转或俯仰角有变化时会显示,点击指南针图标,可快速使地图变为正常状态,同时指南针隐藏;
1.设置指南针位置

Objective-C
Swift
[_mapView setCompassPosition:CGPointMake(100, 100)];
mapView?.compassPosition = CGPoint.init(x: 100, y:100)

2.获得指南针宽高(只读)

Objective-C
Swift
//width:39;height:39
CGSize compassSize =  self.mapView.compassSize;
//width:39;height:39
let compassSize = mapView?.compassSize

3.设置指南针图片

Objective-C
Swift
[_mapView setCompassImage:[UIImage imageNamed:@"compass"]];
mapView?.setCompassImage(UIImage.init(named: "compass"))

自定义指南针效果如下:

比例尺控件

地图比例尺级别,在手机上当前可使用的级别为4-21级。
1.显示比例尺

Objective-C
Swift
_mapView.showMapScaleBar = YES;
mapView.showMapScaleBar = true

2.设置比例尺位置

Objective-C
Swift
_mapView.mapScaleBarPosition = CGPointMake(200, 20)
mapView?.mapScaleBarPosition = CGPoint.init(x: 200, y: 20)

3.获取比例尺宽高

Objective-C
Swift
//不同级别下,宽高不同
CGSize mapScaleBarSize = self.mapView.mapScaleBarSize;
//不同级别下,宽高不同
let mapScaleBarSize = mapView?.mapScaleBarSize

自定义比例尺显示效果如下: BMKMapView属性控制手势开启关闭
单个手指拖动或滑动地图 scrollEnabled 双指捏合、拉伸缩放地图 zoomEnabled 单指双击放大地图、双指单击缩小地图 zoomEnabledWithTap 双指向上或向下滑动地图俯仰角 overlookEnabled 双指旋转地图 rotateEnabled 单指重压地图 onForceTouch 禁用所有手势 gesturesEnabled

用单个手指拖动地图四处滚动(平移)或用单个手指滑动地图(动画效果),通过调用BMKMapView的 scrollEnabled 属性控制是否启用或禁用平移的功能,默认开启。

禁用平移手势示例代码如下:

Objective-C
Swift
_mapView.scrollEnabled = NO;
mapView?.isScrollEnabled = false

禁用平移手势后,可以通过代码设置地图中心点经纬度来实现地图的平移,示例代码如下:

Objective-C
Swift
[_mapView setCenterCoordinate:CLLocationCoordinate2DMake(39.924257, 116.403263)];
mapView?.centerCoordinate = CLLocationCoordinate2DMake(39.924257, 116.403263)

缩放手势可改变地图的缩放级别,地图响应的缩放手势有两种:单指双击地图(放大)、双指单击地图(缩小),双指捏合、拉伸。

通过调用BMKMapView的 zoomEnabled和zoomEnabledWithTap属性控制是否启用或禁用缩放手势,默认开启。如果启用,用户可以单指双击放大地图、双指单击缩小地图或双指捏合、拉伸缩放地图视图。禁用缩放手势的代码如下:

Objective-C
Swift
//禁止双指拉伸缩放地图
_mapView.zoomEnabled = NO;
//禁止单指双击缩放地图
_mapView.zoomEnabledWithTap= NO;
//禁止双指拉伸缩放地图
mapView?.isZoomEnabled = false
//禁止单指双击缩放地图
mapView?.isZoomEnabledWithTap = false

禁用缩放手势后,可以通过代码设置地图地图比例尺级别来实现地图的缩放,示例代码如下:

Objective-C
Swift
[_mapView setZoomLevel:17];
mapView?.zoomLevel = 17

地图俯视(3D)

用户可以在地图上放置两个手指,移动它们一起向下或向上去增加或减小倾斜角。

通过调用BMKMapView的属性overlookEnabled控制是否启用或禁用俯视(3D)功能,默认开启。如果启用,则用户可使用双指 向下或向上滑动到俯视图。

禁止俯视手势的代码如下:

Objective-C
Swift
_mapView.overlookEnabled= NO;
mapView?.isOverlookEnabled = false

禁用俯视手势后,可以通过代码设置地图地图俯仰角度来实现地图的俯视,示例代码如下:

Objective-C
Swift
//overlooking值的范围为-45~0度
[_mapView setOverlooking:-10];
//overlooking值的范围为-45~0度
mapView?.overlooking = -10

用户可以通过两个手指在地图上转动来旋转地图。

通过调用BMKMapView的属性rotateEnabled控制是否启用或禁用地图旋转功能,默认开启。如果启用,则用户可使用双指 旋转来旋转地图。

禁止地图旋转手势的代码如下:

Objective-C
Swift
_mapView.rotateEnabled= NO;
mapView?.isRotateEnabled = false

禁用旋转手势后,可以通过代码设置地图地图旋转角来实现地图的旋转,示例代码如下:

Objective-C
Swift
//rotation值的范围为-180~180度
[_mapView setRotation:90];
//rotation值的范围为-180~180度
mapView?.rotation = 90

用户可以通过调用BMKMapView的属性gesturesEnabled控制是否一并禁止所有手势,默认关闭。如果启用,所有手势都将被禁用。

禁止所有手势的代码如下:

Objective-C
Swift
_mapView.gesturesEnabled= NO;
mapView?.gesturesEnabled = false

3D Touch

用户单指重压地图会回调BMKMapViewDelegate中的3DTouch代理方法(- mapview:onForceTouch:force:maximumPossibleForce:)。

通过调用BMKMapView的属性forceTouchEnabled控制是否启用3DTouch能力,默认开启。

禁止地图3DTouch能力的代码如下:

Objective-C
Swift
_mapView.onForceTouch = NO;
mapView?.forceTouchEnabled = false

代理方法如下:

Objective-C
Swift
/**
 *3DTouch 按地图时会回调此接口(仅在支持3D Touch,且fouchTouchEnabled属性为YES时,会回调此接口)
 *@param mapview 地图View
 *@param coordinate 触摸点的经纬度
 *@param force 触摸该点的力度(参考UITouch的force属性)
 *@param maximumPossibleForce 当前输入机制下的最大可能力度(参考UITouch的maximumPossibleForce属性)
- (void)mapview:(BMKMapView *)mapView onForceTouch:(CLLocationCoordinate2D)coordinate force:(CGFloat)force maximumPossibleForce:(CGFloat)maximumPossibleForce;
*3DTouch 按地图时会回调此接口(仅在支持3D Touch,且fouchTouchEnabled属性为YES时,会回调此接口) *@param mapview 地图View *@param coordinate 触摸点的经纬度 *@param force 触摸该点的力度(参考UITouch的force属性) *@param maximumPossibleForce 当前输入机制下的最大可能力度(参考UITouch的maximumPossibleForce属性) func mapview(_ mapView: BMKMapView!, onForceTouch coordinate: CLLocationCoordinate2D, force: CGFloat, maximumPossibleForce: CGFloat) {
 
推荐文章