2012-02-12 17 views
4

我創建瞭如下的方法來一個的CGRect轉換爲MapRect如下如何轉換的CGRect到MapRect

- (MKMapRect)mapRectForRect:(CGRect)rect 
{ 
    CLLocationCoordinate2D topleft = [mapView convertPoint:CGPointMake(rect.origin.x, rect.origin.y) toCoordinateFromView:canvasView]; 
    CLLocationCoordinate2D bottomeright = [mapView convertPoint:CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect)) toCoordinateFromView:canvasView]; 
    MKMapPoint topleftpoint = MKMapPointForCoordinate(topleft); 
    MKMapPoint bottomrightpoint = MKMapPointForCoordinate(bottomeright); 

    return MKMapRectMake(topleftpoint.x, topleftpoint.y, bottomrightpoint.x - topleftpoint.x, bottomrightpoint.y - topleftpoint.y); 
} 

我做了一個小測試。

UIImageView *imageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"heart.png"] imageByScalingProportionallyToSize:CGSizeMake(100, 100)]]; 
    imageView.frame = CGRectMake(0, 0, 100, 100); 
    imageView.center = [mapView convertCoordinate:mapView.centerCoordinate toPointToView:canvasView]; 
    [canvasView addSubview:imageView]; 

    CGRect rect = imageView.frame; 
    for (int i = 0; i < 5; i ++) 
    { 
     NSLog(@"%f, %f, %f, %f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); 
     maprect = [self mapRectForRect:rect]; 
     NSLog(@"%f, %f, %f, %f", maprect.origin.x, maprect.origin.y, maprect.size.width, maprect.size.height); 

     region = MKCoordinateRegionForMapRect(maprect); 
     rect = [mapView convertRegion:region toRectToView:canvasView]; 
    } 

它工作得很好在iOS 5:

110.000000,180.000000,100.000000,100.000000

78118912.000000,94811514.406252,52428800.000000,52428799.999997

110.000000,180.000000,100.000000,100.000000

78118912.000000,94811514.406252,52428800.00000 0,52428799.999997

110.000000,180.000000,100.000000,100.000000

78118912.000000,94811514.406252,52428800.000000,52428799.999997

110.000000,180.000000,100.000000,100.000000

78118912.000000,94811514.406252,52428800.000000,52428799.999997

110.000000,180.000000,100.000000,100.000000

78118912.000000,94811514.406252,52428800.000000,52428799.999997

但是,在iOS 4.3中的結果是有點怪異。

110.000000,180.000000,100.000000,100.000000

78118912.000000,94811514.406252,52428800.000000,52428799.999997

110.000000,174.263596,100.000000,101.746048

78118912.000000,91803986.406252,52428800.000000,53344231.999997

110.000000,166.962997,100.000000,104.330460

78118912.000000,87976370.406253,52428800.000000,54699207.999997

110.000000,157.400009,100.000000,108.272507

78118912.000000,82962610.406253,52428800.000000,56765975.999997

110.000000,144.297470,100.000000,114.581375

78118912.000000,76093106.406254 ,52428800.000000,60073639.999996

+0

https://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html' - (MKMapRect)mapRectForRect:(的CGRect)rect' – SAKrisT 2012-02-12 16:46:05

+0

我檢查它。這不是我想要的。我想將其他視圖中的矩形轉換爲mapview。方法http://stackoverflow.com/questions/6775718/how-to-make-the-union-between-two-mkcoordinateregion也無法正常工作。 – newme 2012-02-13 01:46:36

+2

任何人都有同樣的問題? – newme 2012-02-20 11:08:41

回答

0

像這樣的東西(Swift代碼)似乎工作正常。在這種情況下,mapView的類型爲GMSMapView!,所以mapView.frame的類型爲CGRect

let mkMapSize = MKMapSize(width: Double(self.mapView.frame.width), height: Double(self.mapView.frame.height)) 
let mkMapPoint = MKMapPoint(x: Double(self.mapView.frame.origin.x), y: Double(self.mapView.frame.origin.y)) 
let mkMapRect = MKMapRect(origin: mkMapPoint, size: mkMapSize)