根据设备标题旋转MKAnnotationPinView

时间:2012-10-06 20:16:29

标签: iphone annotations mkmapview mkpinannotationview

在我的应用程序中,我根据设备标题旋转MapView,我只有一个注释,我正在旋转它的引脚,它也是pinView。 我的旋转方法在​​下一个函数

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
if (newHeading.headingAccuracy < 0)
    return;

CLLocationDirection  theHeading = ((newHeading.trueHeading > 0) ?
                                   newHeading.trueHeading : newHeading.magneticHeading);

lastHeading = theHeading;
[self rotateImage:self.mapView duration:0.1 degrees:-theHeading];

[self rotateImage:jerusalemPinView duration:0.1 degrees:theHeading];

}    

旋转功能:

- (void)rotateImage:(UIView *)view duration:(NSTimeInterval)duration
        degrees:(double)angleDegrees
{

// Setup the animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationBeginsFromCurrentState:YES];

// The transform matrix

CGAffineTransform transform =
CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(angleDegrees));
view.transform = transform;

[UIView commitAnimations];
}

它正在工作但是然后注释和pinView始终“尝试转回北方”,然后下次当设备被转动时我的方法工作等等。 我错过了什么?

由于

1 个答案:

答案 0 :(得分:1)

在旋转jerusalemPinView之后,viewForAnnotation会重新绘制视图吗?我建议在重要方法的顶部放置一个调试行,并检查它们被调用的顺序。我的猜测是在viewForAnnotation中你创建一个新的jerusalemPinView,将它分配给pin,然后didUpdateHeading被调用并且你旋转它,然后再次调用viewForAnnotation并再次生成一个新的(未旋转的)jerusalemPinView。