以下のように 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.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
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