8

我已經爲用戶當前位置加載了自定義註釋圖像。我在後臺每隔1秒後更新當前用戶位置。平滑移動地圖上的註釋圖像

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
[self performSelectorOnMainThread:@selector(tempupdate) withObject:nil waitUntilDone:NO]; 
[pool release]; 

-(void)tempupdate 
{ 
    NSLog(@"callToLocationManager"); 
    mylocationManager = [[CLLocationManager alloc]init]; 
    NSLog(@"locationManagerM = %@",mylocationManager); 
    mylocationManager.delegate = self; 
    mylocationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    mylocationManager.distanceFilter = 500; 
    [mylocationManager startUpdatingLocation]; 
} 

更新當前latutude和經度我正在使用清爽下面的代碼

MKCoordinateRegion region; 
MKCoordinateSpan span; 
span.latitudeDelta=0.002; 
span.longitudeDelta=0.002; 
CLLocationCoordinate2D location; 
location.latitude=[lat doubleValue]; 
location.longitude=[longt doubleValue]; 
region.span=span; 
region.center=location; 
addAnnotation=[[AddressAnnotation alloc]initWithCoordinate:location]; 
[email protected]"You are here"; 
[self.mapView removeAnnotations:self.mapView.annotations]; 
[self.mapView addAnnotation:addAnnotation]; 
[self.mapView setRegion:region animated:TRUE]; 
[self.mapView regionThatFits:region]; 

但增加了map.How避免這種閃爍效果之前每一次的定製標註圖像閃爍的地圖後?

回答

3

我還沒有測試過,但基於快速瀏覽一下你的代碼,我猜想問題在於你刪除了註釋,然後添加了一個新的。

您是否試過編輯已經附加的註釋屬性?

NSArray* curAnnotations = [mapView annotations]; 
AddressAnnotation* aa = [curAnnotations lastObject]; // I am assuming you only have 1 annotation 
aa.mTitle = @"You are here"; // or don't do this if it never changes 
[aa setCoordinate:location]; 

注:蘋果文件明確叫出「setCoordinate」方法的東西,應該被用來支持拖動或頻繁更新。

+0

我知道問題在於刪除和添加地圖視圖的註解,但沒有任何其他辦法可以做到這一點?你能告訴我在細節我應該怎麼辦? – 2012-03-19 06:43:51

+0

編輯我的答案示例代碼 – MobileVet 2012-03-21 17:42:18

+0

嘿謝謝你的答覆,但它的不工作仍然給我跳躍效果。 – 2012-03-27 11:48:14

1

您不能從地圖中刪除註釋。改爲改變UIView beginAnimations-commitAnimations塊中的註釋座標;

它會是這個樣子:

[UIView beginAnimations:@"yourAnimationName" context:nil]; 
[UIView setAnimationDuration:1.0]; 
[yourAnnotation setCoordinate:yourNewCoordinate]; 
[UIView commitAnimations]; 

它會平穩地移動註解。

BR, 馬辛Szulc

+0

它爲我工作,非常感謝你! – FreeNickname 2013-04-08 08:56:45

+0

在swift 3我做到了這一點,它的工作原理: – rara 2017-01-26 17:06:29

0
//SWIFT 3 
UIView.beginAnimations("yourname", context: nil) 
UIView.setAnimationDuration(1.0) 
yourpin.coordinate = MKCoordinateForMapPoint(mycoordinate) 
UIView.commitAnimations()