Как преобразовать CGRect в MapRect

83
6

Я создал метод, как показано ниже, для преобразования 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


спросил(а) 2012-02-12T18:17:00+04:00 8 лет, 3 месяца назад
1
Решение
108

Что-то вроде этого (код 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)

ответил(а) 2015-10-08T22:51:00+03:00 4 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема