2013-06-13 6 views
5

지도 오버레이를 배치했습니다. 기본지도보기와 정확히 겹치도록 회전을 조정해야합니다. 이것을 어떻게 할 수 있습니까? 회전 할 각도를 찾았습니다. 오버레이보기를 어떻게 회전시킬 수 있습니까? 지금까지 오버레이를 추가했지만 변환을 사용하여 회전 할 수는 없습니다. 내가 알아챈 것은 각도를 바꿀 때 이미지가 회전하지 않고 대신 x 축 (측면 방향)을 따라 슬라이드한다는 것입니다. 여기 회전 할 MKOverlayView

이 내가 내가 수동으로 김프를 사용하여 이미지를 회전하여 배치하는 해결 방법을

enter image description here

을 얻을 것입니다 내가

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

을 시도하는 코드입니다. 그러나 나는 그것을 사용자 정의해야합니다.

김프를 사용하여 형질 전환 image과 오버레이

을 같이지도에 배치하고 내가 [메모를 변환하여 컨텍스트를 회전 할 때이 경우 : 이미지가 회전하지만보기 정확한 위치에 있지 된 컨텍스트를 회전하면서 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

@ 루카스 : 자체로 참조되는 오버레이보기. 심지어 컨텍스트를 회전 시키려고했습니다. 이미지가 확대되는 동안 그 일이 일어났습니다. 이것을 달성 할 다른 방법이 있습니까? 할 수있는 방법이있는 것 같지만 시도한 모든 방법으로 확대 또는 정확한 위치에서 이미지가 깨지는 회전을 얻을 수있었습니다. 둘 다 아는 것이 아닙니다. – 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); 

그것은 나와 함께 올 시도하시기 바랍니다