MAP上特定位置的用户当前位置

时间:2016-12-09 10:09:03

标签: ios swift3 mkmapview core-location

  • 的MKMapView
  • CoreLocation
  • Swift3.0

我有这样的要求:

创建一个应用程序,我从webservice获取不同位置的Lat and Long。使用自定义AnnotationView在地图上绘制这些位置。除此之外,我正在展示User Current Location with Custom Image

这里所有工作都在fine

现在,当用户移动时,用户当前位置Pin会改变其位置,因此对此有一个重要的要求,我需要以这样一种方式使其位于地图的底部({{1} })从上到下。

我做了一些RND并找到了一些有用的链接:

但这不再适用了。 请建议如何在just 100 pixel地图中设置用户当前位置图钉,使其始终位于地图底部(距离底部100像素)

所需的针位置: enter image description here

目前它正处于其他位置。

注意 - **不希望谷歌地图获得此类功能

2 个答案:

答案 0 :(得分:1)

如果您使用过类似mapView.setUserTrackingMode(.Follow, animated: true)的内容,那么用户位置将始终显示在地图的中心,每当更新用户位置时,缩放/平移都会自动调整。

您需要停用UserTrackingMode,然后每次更改用户位置时,使用func setVisibleMapRect(_ mapRect: MKMapRect, edgePadding insets: UIEdgeInsets, animated animate: Bool)手动调整地图缩放/平移。

我在类似情况下使用了以下代码

let annotationPoint = MKMapPointForCoordinate(mapView.userLocation.coordinate);
var zoomRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 1, 1);
annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
let pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 1, 1);
zoomRect = MKMapRectUnion(zoomRect, pointRect);
mapView.setVisibleMapRect(zoomRect, edgePadding: UIEdgeInsetsMake(40, 50, 160, 50), animated: true)

P.S。在这种情况下,edgePadding是您的朋友。

答案 1 :(得分:0)

以下是用于定位地图的技巧,以便自动调整UserLocation引脚:

func setUserLocationOnLowerPositiononMap(coordinate: CLLocationCoordinate2D) {
        var region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
        region.center = coordinate
        self.map.setRegion(region, animated: true)
        //self.map.moveCenterByOffSet(offSet: CGPoint(x: 0, y: -130), coordinate: coordinate)
        self.map.moveCenterByOffSet(offSet: CGPoint(x: 0, y: SCREEN_HEIGHT - SCREEN_HEIGHT * 4/3 + 0 ), coordinate: coordinate)
    }