2013-06-13 3 views
5

У меня есть наложение маршрута для размещения над картой. Я должен настроить его вращение так, чтобы оно совпадало с основным видом карты. Как я могу это достичь? Я нашел угол поворота. Как я могу повернуть свое оверлейное представление? До сих пор я добавил наложение, но не могу повернуть с помощью преобразований. Я заметил, что когда я меняю угол, изображение не вращается, вместо этого оно скользит вдоль оси х (боковые стороны).MKOverlayView для поворота

Вот код, который я попытался

- (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); 
} 

Это то, что я получаю

enter image description here

У меня есть обходной путь, в котором я вручную повернуть изображение с помощью GIMP и поместить его. Но мне нужно, чтобы это было настроено.

Это image трансформированы с использованием 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); 
+0

Как это ваш код инициализации или как выглядит «я», к которому вы применяете преобразование? Вы пытались изменить контекст? – Lukas

+0

@Lukas: его вид сверху, на который ссылается как на себя. Я даже попытался вращать контекст. Случилось так, что при масштабировании изображения ломается. Есть ли другой способ достичь этого? Я чувствую, что есть способ сделать, но все способы, которые я пытался, я мог бы либо добиться вращения с изменением изображения при масштабировании или точном местоположении. Не оба вместе. – Meera

+0

@MeeraJPai вы можете представить версию, в которой изображение повернуто так, как вы хотите, чтобы оно повернулось? Я понимаю, что вам, возможно, придется использовать обходной путь, чтобы получить то, что вы хотите в этом одном экземпляре. –

ответ

0

Попробуйте добавить этот метод:

- (UIImage *) rotate: (UIImage *) image angle:(double) 
{ 
    //double angle = 20; 
    CGSize s = {image.size.width, image.size.height}; 
    UIGraphicsBeginImageContext(s); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextTranslateCTM(ctx, 0,image.size.height); 
    CGContextScaleCTM(ctx, 1.0, -1.0); 

    CGContextRotateCTM(ctx, 2*M_PI*angle/360); 
    CGContextDrawImage(ctx,CGRectMake(0,0,image.size.width, image.size.height),image.CGImage); 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 

} 
0
From your code, you change order of two line. It will be ok: 

CGContextScaleCTM(ctx, 1.0, -1.0); 
CGContextRotateCTM(ctx,-35.88); 
CGContextTranslateCTM(ctx, 0.0, -theRect.size.height); 
CGContextDrawImage(ctx, theRect, imageReference); 

Это правильно со мной, пожалуйста, попробуйте

Смежные вопросы