一个Mapkit的...Bug?

 • 

MKMapkit的MKUserTrackingModeFollowWithHeading和setCamera同时使用的时候 会有个隐形的bug...

想写一个开源的Ingress,这里面就有个需求,地图上要保证倾斜角 保证高度,而默认的Camera是没有倾斜角度的,需要加一个新的setCamera

一开始设置了

self.HackMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading  

毕竟追踪定位是肯定的啊...然后就是

if ([mapView respondsToSelector:@selector(camera)]) {  
        [mapView setShowsBuildings:YES];
        MKMapCamera *newCamera = [[mapView camera] copy];
//倾斜角
        [newCamera setPitch:70.0];
//高度
        [newCamera setAltitude:100.0];
        [mapView setCamera:newCamera animated:YES];
    }

这个时候执行代码就会发现: MKUserTrackingModeFollowWithHeading总是慢于setCamera的 而且优先级好像也高些(...虽然这么说有点不专业)
也就是说: setCamera会先执行 于是屏幕上Camera先降低高度 调整倾斜角度
结果一到两秒后MKUserTrackingModeFollowWithHeading一执行 整个地图移动到我的位置 这个时候之前setCamera的参数就跟着MKUserTrackingModeFollowWithHeading全部复位了
角度和高度全没了...
全没了...
没了...
了...
...

更甚 因为有设置

[mapView setCamera:newCamera animated:YES];

有时候在setCamera的animated没有执行完的时候 ,MapKit的协议

- (void)mapViewWillStartLocatingUser:(MKMapView *)mapView{ }

就已经开始执行了,而地图拿到我的位置也会进行一个动画移动到我的位置上 这个时候:
setCamera动画的目标是默认地图的位置(MKCoordinateRegion,一般是大西洋某个不知道在哪的海里面...)
MKUserTrackingModeFollowWithHeading动画的目标是我现在的位置
这两个动画同时执行 结果就是地图到最后显示的什么也不是 介于MKCoordinateRegion和我当前定位位置的中间位置....

_ (:з」∠) _


好吧...其实说起来 也不算是bug 但是按照我的理解 苹果应该做好这部分的逻辑判断的...否则我硬要使用setCamera的话 简直要把整个MKUserTrackingModeFollowWithHeading

+ (instancetype _Nonnull)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
fromEyeCoordinate:(CLLocationCoordinate2D)eyeCoordinate  
eyeAltitude:(CLLocationDistance)eyeAltitude  

自己重写一遍...而且肯定没有苹果自己写的好


丢几个类似的问题:
1.stackoverflow

I believe this is a bug in MapKit. I made similar observations with programmatic zooming while MKUserTrackingModeFollowWithHeading is enabled: The map shortly zooms out but returns to the previous zoom level as soon as it receives the next location update.

2.openradar

MapKit: programmatic zooming during UserTracking

3.openradar

MKUserTrackingModeFollow prohibits annotation selection at the edge


EDIT:2015-9-3 12:28
写了一个ticket给bugreport
SEE:
http://openradar.appspot.com/22539174