我有这样的要求:
创建一个应用程序,我从webservice获取不同位置的Lat and Long
。使用自定义AnnotationView
在地图上绘制这些位置。除此之外,我正在展示User Current Location with Custom Image
。
这里所有工作都在fine
。
现在,当用户移动时,用户当前位置Pin会改变其位置,因此对此有一个重要的要求,我需要以这样一种方式使其位于地图的底部({{1} })从上到下。
我做了一些RND并找到了一些有用的链接:
但这不再适用了。
请建议如何在just 100 pixel
地图中设置用户当前位置图钉,使其始终位于地图底部(距离底部100像素)
目前它正处于其他位置。
注意 - **不希望谷歌地图获得此类功能。
答案 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)
}