2013-06-13 28 views
5

Tôi có một lớp phủ tuyến đường được đặt trên bản đồ. Tôi phải điều chỉnh xoay của nó sao cho nó trùng lặp chính xác với chế độ xem bản đồ cơ bản. Làm thế nào tôi có thể đạt được điều này? Tôi đã tìm thấy góc xoay. Làm thế nào tôi có thể xoay chế độ xem lớp phủ của mình? Cho đến bây giờ tôi đã thêm lớp phủ nhưng không thể xoay bằng cách sử dụng các biến đổi. Những gì tôi nhận thấy là khi tôi thay đổi góc, hình ảnh không quay, thay vào đó nó trượt dọc theo trục x (các cách phụ).MKOverlayView được xoay

Dưới đây là đoạn code mà tôi đã cố gắng

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

Đây là những gì tôi nhận được

enter image description here

Tôi có một cách giải quyết, trong đó tôi tự xoay hình ảnh sử dụng GIMP và đặt nó. Nhưng tôi cần nó để được tùy chỉnh.

Đây là image chuyển sử dụng GIMP và khi được đặt trên bản đồ như lớp phủ

và điều này là khi tôi xoay Bối cảnh sử dụng chuyển đổi [lưu ý: trong khi quay bối cảnh ảnh có thể xoay nhưng không phải là ở vị trí chính xác Xem image. Cũng vỡ hình ảnh trên phóng to]

Đây là những gì tôi đã làm

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

thế nào là mã khởi tạo của bạn hay cái gì là "tự" bạn đang áp dụng phép biến đổi? Bạn đã thử xoay ngữ cảnh chưa? – Lukas

+0

@Lukas: Chế độ xem lớp phủ được tham chiếu là tự. Tôi thậm chí còn cố gắng xoay ngữ cảnh. Điều gì đã xảy ra là trong khi phóng to hình ảnh bị vỡ. Có cách nào khác để đạt được điều này không? Tôi cảm thấy như có một cách để làm, nhưng tất cả những cách tôi cố gắng tôi có thể đạt được một vòng quay với hình ảnh phá vỡ trên phóng to hoặc vị trí chính xác. Không phải cả hai cùng nhau. – Meera

+0

@MeeraJPai bạn có thể trình bày một phiên bản có hình ảnh được xoay theo cách bạn muốn xoay không? tôi hiểu rằng bạn có thể phải sử dụng cách giải quyết của bạn để có được những gì bạn muốn trong trường hợp này. –

Trả lời

0

Hãy thử thêm phương pháp này:

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

Nó là đúng với tôi, hãy thử

Các vấn đề liên quan