我试图得到它,以便当您旋转 iOS 7 地图时,注释会随相机航向一起旋转。想象一下,我有必须始终指向北方的 pin 注释。
起初这看起来很简单,应该有一个 MKMapViewDelegate 用于获取相机旋转,但没有。
我已经尝试使用地图代表来查询地图视图的camera.heading
对象,但首先这些代表似乎只在旋转手势之前和之后被调用一次:
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
我也尝试在 camera.heading 对象上使用 KVO,但这不起作用,并且相机对象似乎是某种代理对象,只有在旋转手势完成后才会更新。
到目前为止,我最成功的方法是添加一个旋转手势识别器来计算旋转增量,并将其与区域更改委托开始时报告的相机航向一起使用。这在一定程度上有效,但在 OS 7 中,您可以“轻弹”您的旋转手势,它增加了我似乎无法跟踪的速度。有什么方法可以实时跟踪摄像机的航向吗?
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
heading = self.mapView.camera.heading;
}
- (void)rotationHandler:(UIRotationGestureRecognizer *)gesture
{
if(gesture.state == UIGestureRecognizerStateChanged) {
CGFloat headingDelta = (gesture.rotation * (180.0/M_PI) );
headingDelta = fmod(headingDelta, 360.0);
CGFloat newHeading = heading - headingDelta;
[self updateCompassesWithHeading:actualHeading];
}
}
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
[self updateCompassesWithHeading:self.mapView.camera.heading];
}