2012-10-06 75 views
0

在我的應用程序中,我根據設備標題旋轉MapView,我只有一個註釋,並且我正在旋轉它的pin並且它也是pinView。 我的旋轉方法是下一個功能裏面根據設備標題旋轉MKAnnotationPinView

- (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

我不完全明白。你是說第一次不行,但是在那之後呢?什麼定義了一個新的嘗試?這是一個新的電話didUpdateHeading嗎?如何向我們展示您在該功能中的代碼。 – Craig

+0

用代碼編輯。 它的工作原理,然後又跳回北 – user1553961

回答

0

旋轉jerusalemPinView後,也認爲得到由viewForAnnotation重繪?我建議在重要方法的頂部放置一條調試線,並檢查它們被調用的順序。我的猜測是,在viewForAnnotation中,您創建了一個新的jerusalemPinView,將其分配給該引腳,然後調用didUpdateHeading並旋轉它,然後再次調用viewForAnnotation並再次創建一個新的(未旋轉的)jerusalemPinView。

+0

好主意,我要試試這個 – user1553961