私は2種類の注釈を表示するマップを持っています:場所と場所のクラスタ。クラスタを拡大すると、クラスタが展開され、クラスタ内に含まれる場所が表示されます。これらの場所がマップに追加されると、親クラスターの座標が注釈オブジェクトに格納されます。私がやりたいことは、これらの場所が追加されると、それらの親クラスターの場所から広がるように、アニメーションを持たせることです。ここでのMapViewのための私のコードは次のとおりです。didAddAnnotationViews:緯度/経度の奇妙な座標を画面の位置に合わせる
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
MKAnnotationView *aV;
for (aV in views)
{
if (([aV.annotation isKindOfClass:[PostLocationAnnotation class]]) && (((PostLocationAnnotation *)aV.annotation).hasParent))
{
CLLocationCoordinate2D startCoordinate = ((PostLocationAnnotation *)aV.annotation).parentCoordinate;
CGPoint startPoint = [ffMapView convertCoordinate:startCoordinate toPointToView:self.view];
CGRect endFrame = aV.frame;
aV.frame = CGRectMake(startPoint.x, startPoint.y, aV.frame.size.width, aV.frame.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.00];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[aV setFrame:endFrame];
[UIView commitAnimations];
((PostLocationAnnotation *)aV.annotation).hasParent = NO;
}
}
}
これは、マップのポイントは、遠景の焦点外のいくつかの場所から飛ぶように思われます。デバッグを行うと、endFrame.originとstartPointの値の間に大きな矛盾があることがわかりました。特定のaVに対して、endFrame.originは(32657,21781)(CGFloats)とstartPoint(159.756256,247.213226 )(やはり両方のCGFloats)。私はendFrame.originが正しい値であると仮定していますが、ポイントは私が望むところに終わっているので、離れたところから来ています。私はコードの他の多くの部分でconvertCoordinate:toPointToView:メソッドを使用しましたが、問題はありませんでした。 startPointのX値とY値にさまざまな値を乗算しようとしましたが、startPointのすべての値に対して単一の係数が保持されません。何が起きているのか?
それは働きます!ありがとうございました。私はこの一日中立ち往生してきた – benwad