当用户平移地图时,iOS 6中的地图注释不会保持旋转状态

会真的很喜欢这个问题的答案https://devforums.apple.com/message/723468 。 我不能发布细节,因为它关于iOS 6,并且是每个苹果机密。

请将回答/评论发布到Apple Dev论坛post,让我知道这里。

编辑:由于iOS6正式发布:

在我的pre-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 } } 

这工作得很好(数千用户)。

然而,在ios6中(我在9/4/2012更新了Xcode / sdk),注解视图不保持这种旋转(例如,如果地图被平移)。 他们翻转回到他们的非旋转状态(这是因为我的地图旋转意味着他们显示文字在一个angular度,而不是水平)。

该代码暂时旋转注释,使其文本显示水平,但如果地图被平移(和他们似乎也是其他原因),然后注释翻转到他们的非旋转状态,我的注释文本出现在一个angular度相对于旋转的地图。

什么是正确的方式来旋转MKAnnotationView,以便它保持在IOS6旋转? MKMapView中导致更改的内容发生了什么变化?

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

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

这是在我原来的问题发表评论,然后由克里斯蒂克斯作为回答(引用我的评论)张贴,但我张贴并接受我自己的答案,因为这是我想出了它。 这有道理吗?

这是发表评论,我重新张贴它作为一个答案,所以任何人都可以很容易地看到(浪费更less的时间试图弄清楚)。

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

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

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

在MKAnnotationView的子节点上设置变换,所以在伪代码中:

 view.child.transform = CGAffineTransformMakeRotation(0.3); 

让他们控制注解视图并控制你的视图子树。 转换连接,你会inheritance他们所做的任何位置。 适用于iOS 6的我。