マップ上に配置するルートのオーバーレイがあります。基になるマップ ビューと正確に重なるように回転を調整する必要があります。どうすればこれを達成できますか?回転する角度を見つけました。オーバーレイ ビューを回転するにはどうすればよいですか? 今までオーバーレイを追加しましたが、変換を使用して回転できません。私が気付いたのは、角度を変更すると、画像が回転せず、代わりに x 軸 (横方向) に沿ってスライドすることです。
これが私が試したコードです
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"routeImage" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
MKMapRect theMapRect = self.overlay.boundingMapRect;
CGRect theRect = [self rectForMapRect:theMapRect];
CGAffineTransform transform = CGAffineTransformMakeRotation((-35.88) / 180.0 * M_PI);
[self setTransform:transform];
CGContextSaveGState(context);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -theRect.size.height);
CGContextDrawImage(context, theRect,image.CGImage);
CGContextRestoreGState(context);
}
これは私が得るものです
GIMP を使用して画像を手動で回転させて配置する回避策があります。しかし、私はそれをカスタマイズする必要があります。
これは、GIMP を使用して変換され、オーバーレイとしてマップに配置されたときの画像です。
これは、変換を使用してコンテキストを回転させたときです [注: コンテキストを回転させている間、画像は回転しますが、正確な位置にはありませんimageを参照してください。また、ズーム時に画像が壊れます]
これは私がしたことです
//Hayl-Road-Final.png is the actual image without transformation using GIMP
UIImage *image = [[UIImage imageNamed:@"Hayl-Road-Final.png"] retain];
CGImageRef imageReference = image.CGImage;
MKMapRect theMapRect = [self.overlay boundingMapRect];
CGRect theRect = [self rectForMapRect:theMapRect];
// We need to flip and reposition the image here
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextTranslateCTM(ctx, 0.0, -theRect.size.height);
CGContextRotateCTM(ctx,-35.88);
//drawing the image to the context
CGContextDrawImage(ctx, theRect, imageReference);