2016-02-15 62 views
2

我正在使用GMSMapView。因此,我添加了自定义GMSMarker,并在用户开始移动并更改locationManager中标记的角度时设置图像(例如自行车图像)并为该标记设置动画。沿着最后更新的GPS坐标平滑移动并旋转GMSMarker Swift iOS

目前我只是更新GMSMarker的位置属性。 但是它给GMSMarker跳跃效果。 代替此我想移动和旋转的GMSMarker 顺利/正确到GMSMapView中。

我如何在Swift中实现这一点?谢谢。

(void)updateLocationoordinates(CLLocationCoordinate2D) coordinates 
    { 
    if (marker == nil) { 
     marker = [GMSMarker markerWithPosition:coordinates]; 
     marker.icon = [UIImage imageNamed:IMAGE]; 
     marker.map = mapView; 
    } else{ 
    marker.position = coordinates; 
      } 
    } 

回答

1

我面临同样的问题,并尝试了很多方法。最后,我想出了一个解决方案 - 在先前的位置点和当前的位置点之间建立角度,并且我使用了UIImageView而不是GMSMarker。

//in location update method 
CGPoint anglepoint = [myMapView.projection pointForCoordinate:currLocation.coordinate]; 
CGFloat angle = [self getAngle:anglepoint]; 
if(!isnan(angle)){ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.8f]; 
    sampleImgView.transform = CGAffineTransformMakeRotation(angle); 
    [sampleImgView setCenter:[myMapView.projection pointForCoordinate:CLLocationCoordinate2DMake(currLocation.coordinate.latitude, currLocation.coordinate.longitude)]]; 
    [UIView commitAnimations]; 
    prevCurrLocation = currLocation; 
} 


-(CGFloat) getAngle: (CGPoint) touchedPoints 
{ 
    CGPoint previousLocationPoint = [myMapView.projection pointForCoordinate:prevCurrLocation.coordinate]; 

    CGFloat x1 = previousLocationPoint.x; 
    CGFloat y1 = previousLocationPoint.y; 

    CGFloat x2 = touchedPoints.x; 
    CGFloat y2 = touchedPoints.y; 

    CGFloat x3 = x1; 
    CGFloat y3 = y2; 

    CGFloat oppSide = sqrtf(((x2-x3)*(x2-x3)) + ((y2-y3)*(y2-y3))); 
    CGFloat adjSide = sqrtf(((x1-x3)*(x1-x3)) + ((y1-y3)*(y1-y3))); 

    CGFloat angle = atanf(oppSide/adjSide); 
    // Quadrant Identifiaction 
    if(x2 < previousLocationPoint.x) 
    { 
     angle = 0-angle; 
    } 


    if(y2 > previousLocationPoint.y) 
    { 
     angle = M_PI/2 + (M_PI/2 -angle); 
    } 
    return angle; 
} 

使用此动画:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5f]; 
sampleImgView.transform = CGAffineTransformMakeRotation(angle); 
[sampleImgView setCenter:[myMapView.projection pointForCoordinate:CLLocationCoordinate2DMake(currLocation.coordinate.latitude, currLocation.coordinate.longitude)]]; 
[UIView commitAnimations]; 

下面是示例ImageView的:

sampleImgView = [[UIImageView alloc]init]; 
sampleImgView.center = myMapView.center; 
sampleImgView.frame = CGRectMake(0,0, 25, 50); 
sampleImgView.backgroundColor = [UIColor clearColor]; 
[myMapView addSubview:sampleImgView]; 

希望这有助于。

+0

如果我想旋转图像的方向,那么怎么样?谢谢你的回答。 – Captain

+0

Hi Riju,请检查更新的答案。 –

+0

嗨Satish,谢谢!你可以分享一下源代码吗?因此,理解和实施会很有帮助! – Captain