【问题标题】:Map Annotations in iOS 6 don't stay rotated when user pans the map当用户平移地图时,iOS 6 中的地图注释不会保持旋转
【发布时间】:2012-09-07 20:13:29
【问题描述】:

真的很想回答这个问题https://devforums.apple.com/message/723468。我无法发布详细信息,因为它是关于 iOS 6 并且是 Apple 的机密信息。

请将答案/cmets 发布到 Apple Dev 论坛帖子并在此处让我知道。

编辑:由于 iOS6 正式发布:

在我的 ios6 之前的代码中,我这样做是为了在用户位置移动时旋转地图:

//this is in my MKMapViewDelegate
-(void) rotateMap:(MKMapView *)mapViewTmp forLocation:(MKUserLocation *) userLocation {
     ...
     //calculate needed rotation
     ...
     [mapViewTmp setTransform:CGAffineTransformMakeRotation(lastRotation)]; //rotate the MKMapView

     for (id<MKAnnotation> annotation in mapViewTmp.annotations) {
           MKAnnotationView* annotationView =[mapViewTmp viewForAnnotation:annotation];

                    [annotationView setTransform:CGAffineTransformMakeRotation(-lastRotation)];      //counter rotate the Annotation Views

                    [annotationView setNeedsDisplay];  //ios6
     }

}

这很好用(1000 多个用户)。

然而,在 ios6 中(我在 2012 年 9 月 4 日更新了 Xcode/sdk),注释视图不保持这种旋转(例如,如果地图被平移)。它们会翻转回未旋转的状态(由于我的地图是旋转的,这意味着它们以一定角度而不是水平显示文本)。

代码确实会暂时旋转注释,使其文本显示为水平,但如果地图被平移(并且它们似乎也是其他原因),那么注释会翻转到它们的非旋转状态并且我的注释文本会出现在一个角度相对于旋转的地图。

旋转 MKAnnotationView 以使其在 IOS6 中保持旋转的正确方法是什么? MKMapView 发生了什么变化导致了这种变化?

【问题讨论】:

  • 如果您因为保密协议而无法在问题中发布详细信息,我们将如何在答案中发布详细信息? :)
  • 在 Apple Dev 论坛中发布详细信息。您可以在此处发布答案,如果您想要答案的堆栈点,只需说“查看我发布的回复”即可。
  • 我看到了完全相同的问题。当用户平移或缩放图像时,我应用于 MKAnnotationView 对象的转换被删除。我已经向 Apple Dev 提交了错误报告并回复了您的论坛帖子。如果/当我找到答案时,我会告诉你。重大回归,我从 iOS 3.0 开始就成功了。
  • 不幸的是,在最初的测试版令人兴奋之后,Apple 开发者论坛可能会变得非常风滚草。
  • 并且修复方法是===>在 viewForAnnotation 方法中: if(is6orMore) { [annotationView setTransform:CGAffineTransformMakeRotation(.001)]; //iOS6 BUG 解决方法!!!!!!! }

标签: ios iphone


【解决方案1】:

解决方法是在 viewForAnnotation 方法中执行以下操作:

// iOS6 BUG WORKAROUND !!!!!!!
if (is6orMore) {
     [annotationView setTransform:CGAffineTransformMakeRotation(.001)]; //any small positive rotation
}

这是我在原始问题中作为评论发布的,然后由 cristis 作为答案发布(参考我的评论),但我发布并接受我自己的答案,因为是我提出的。这有意义吗?

【讨论】:

    【解决方案2】:

    这是作为评论发布的,我将其重新发布为答案,以便任何人都可以轻松看到它(并且浪费更少的时间试图弄清楚)。

    修复方法是===>在 viewForAnnotation 方法中:

    // iOS6 BUG WORKAROUND !!!!!!!
    if (is6orMore) {
         [annotationView setTransform:CGAffineTransformMakeRotation(.001)]; 
    }
    

    【讨论】:

      【解决方案3】:

      我看到了同样的事情。这是修复:

      在 MKAnnotationView 的子级上设置您的转换,所以在伪代码中:

      view.child.transform = CGAffineTransformMakeRotation(0.3);
      

      让他们控制注释视图并控制您的视图子树。转换连接,您将继承它们在位置上所做的任何事情。在 iOS 6 上为我工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多