2013-06-13 8 views
5

Mam nakładkę trasy do umieszczenia na mapie. Muszę dostosować jego obrót tak, aby pokrywał się dokładnie z podstawowym widokiem mapy. Jak mogę to osiągnąć? Znalazłem kąt obrotu. Jak mogę obrócić widok nakładki? Do tej pory dodałem nakładkę, ale nie mogę się obracać za pomocą transformacji. Zauważyłem, że gdy zmieniam kąt, obraz nie obraca się, zamiast tego przesuwa się wzdłuż osi x (drogi boczne).MKOverlayView do obrócenia

Oto kod, który starałem

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

To co mam

enter image description here

mam obejście, w którym ręcznie obrócić obraz przy użyciu GIMP i umieszczenia go. Ale potrzebuję tego, żeby być spersonalizowanym.

To image przekształcony za pomocą GIMP-a po umieszczeniu na mapie jako nakładki

i to jest kiedy obracać kontekstowe za pomocą transformaty [Uwaga: podczas obracania kontekst obraz jest obracany, ale nie jest na dokładnym umieszczeniem Zobacz image. Również przerwy obraz na powiększanie]

To co zrobiłem

 //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

Jak to jest twój kod inicjalizacyjny, czy jaki jest widok "ja", do którego stosujesz transformację? Czy próbowałeś obrócić kontekst? – Lukas

+0

@Lukas: Jest to widok nakładki, który jest określany jako self. Próbowałem nawet obracać kontekst. Stało się tak, że podczas powiększania obrazu zrywa. Czy jest jakiś inny sposób na osiągnięcie tego? Czuję, że jest jakiś sposób, ale na wszystkie sposoby, które próbowałem, mogłem osiągnąć obrót z łamaniem obrazu przy powiększaniu lub w dokładnej lokalizacji. Nie razem. – Meera

+0

@MeeraJPai czy mógłbyś przedstawić wersję, która ma obraz obrócony tak, jak chcesz go obrócić? Rozumiem, że możesz użyć swojego obejścia, aby uzyskać to, czego chcesz w tym jednym przypadku. –

Odpowiedz

0

spróbuj dodać tę metodę:

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

Prawdą jest ze mną, spróbuj

Powiązane problemy