在我的应用程序中,我根据设备标题旋转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始终“尝试转回北方”,然后下次当设备被转动时我的方法工作等等。 我错过了什么?
由于
答案 0 :(得分:1)
在旋转jerusalemPinView之后,viewForAnnotation会重新绘制视图吗?我建议在重要方法的顶部放置一个调试行,并检查它们被调用的顺序。我的猜测是在viewForAnnotation中你创建一个新的jerusalemPinView,将它分配给pin,然后didUpdateHeading被调用并且你旋转它,然后再次调用viewForAnnotation并再次生成一个新的(未旋转的)jerusalemPinView。