我有一个要放置在地图上的路线叠加层。我必须调整它的旋转,使其与底层地图视图完全重叠。我怎样才能做到这一点?我找到了旋转的角度。如何旋转我的叠加视图?到目前为止,我已经添加了叠加层,但无法使用变换进行旋转。我注意到的是,当我改变角度时,图像并没有旋转,而是沿着 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 转换的图像,当作为叠加层放置在地图上时
这是当我使用变换旋转上下文时[注意:旋转上下文时,图像被旋转但不在确切位置参见图像。缩放时图像也会中断]
这就是我所做的
//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);