【问题标题】:How to rotate MKMapView and keep the Annotation and the view don't rotate?如何旋转 MKMapView 并保持注解和视图不旋转?
【发布时间】:2011-08-12 06:13:15
【问题描述】:

我正在制作一个显示用户当前位置的 MKMapView。 我想像谷歌地图应用一样旋转地图而不旋转注释。我使用以下代码

-(void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
     mapView.transform=CGAffineTransformMakeRotation(-1*newHeading.magneticHeading*3.14159/180)};

但整个视图像这张图片一样旋转。 The image of the problem in my app

【问题讨论】:

    标签: iphone annotations rotation mkmapview


    【解决方案1】:

    您基本上需要对所有注释视图应用相同的变换,但角度为负,即

    for (id<MKAnnotation> annotation in mapView.annotations) 
    {
        MKAnnotationView* annotationView = [mapView viewForAnnotation:annotation];
        [annotationView setTransform:CGAffineTransformMakeRotation(-angle)];
    }
    

    如果您打算添加更多注释,您也应该将相同的代码放在 mapView:didAddAnnotationViews: 中:

    - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
    {
        for (MKAnnotationView* annotationView in views) 
        {
            [annotationView setTransform:CGAffineTransformMakeRotation(-angle)];
        }
    }
    

    【讨论】:

    • 不需要 - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 中的代码,在航向变化时应用的旋转就足够了(在设备上测试它的权利现在!:) )
    【解决方案2】:

    在 MKMapView 上显示的所有注释和标注都是 MKMapView 的子视图,因此如果您旋转容器视图,它的所有子视图也将被旋转。

    【讨论】:

    • 是的,这就是重点。在控制器中,我只将 mapView 添加为子视图。当我将注解放在mapView 上,并转换mapView 时。所有内容都将旋转,包括 Google 徽标。
    • 抱歉我错过了什么?我的回答基本上意味着目前在 sdk 中没有一种方法支持
    • 您将地图视图添加为子视图,但地图中的所有其他内容都作为子视图添加到地图中。你不这样做,但这就是它在后端的实现方式。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多