2014-01-29 3 views
1

У меня есть MKMapView и никогда не меняющийся CLLocationCoordinate2D. То, что я пытаюсь сделать, - это центр карты, чтобы эта координата была помещена в нижний центр карты. Я могу центрировать карту по этой координате с простой:iOS set MKMapView центр, поэтому поставляется в нижнем центре

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(mapCenter, 10000, 10000); 
[self.mapView setRegion:viewRegion animated:YES]; 

Но как я могу сделать это так, чтобы карта центров на том, что бы сделать это mapCenter скоординировать быть размещены в нижней части карты? Я бы хотел, чтобы он работал независимо от исходного уровня масштабирования карты, если это возможно.

ответ

6

Я написал вам быстрый метод, который должен сделать трюк ...

После получения MKCoordinateRegion с расположением координаты по центру, вы можете создать новую CLLocationCoordinate2D точки центра, добавив часть широтной пролете этого региона (в этом случае - четвертый). Создайте новую область координат, используя новую центральную точку и область старого региона, установите ее как region из MKMapView, и вам хорошо идти.

P.s. - Если вы хотите, чтобы местоположение было сосредоточено полностью внизу, создайте новую центральную точку CLLocationCoordinate2D, добавив половину широтного диапазона области (вместо четвертой).

-(void)setLocation:(CLLocationCoordinate2D)location inBottomCenterOfMapView:(MKMapView*)mapView 
{ 
    //Get the region (with the location centered) and the center point of that region 
    MKCoordinateRegion oldRegion = [mapView regionThatFits:MKCoordinateRegionMakeWithDistance(location, 800, 800)]; 
    CLLocationCoordinate2D centerPointOfOldRegion = oldRegion.center; 

    //Create a new center point (I added a quarter of oldRegion's latitudinal span) 
    CLLocationCoordinate2D centerPointOfNewRegion = CLLocationCoordinate2DMake(centerPointOfOldRegion.latitude + oldRegion.span.latitudeDelta/4.0, centerPointOfOldRegion.longitude); 

    //Create a new region with the new center point (same span as oldRegion) 
    MKCoordinateRegion newRegion = MKCoordinateRegionMake(centerPointOfNewRegion, oldRegion.span); 

    //Set the mapView's region 
    [worldView setRegion:newRegion animated:YES]; 
} 

Here's what you'd get with the method above.

0

Великого JOP Мэтью! Благодаря!

Здесь же раствор в SWIFT 3:

func setLocation(location: CLLocationCoordinate2D, inBottomCenterOfMapView: MKMapView) { 
    let oldRegion = mapView.regionThatFits(MKCoordinateRegionMakeWithDistance(location, 800, 800)) 
    let centerPointOfOldRegion = oldRegion.center 
    let centerPointOfNewRegion = CLLocationCoordinate2DMake(centerPointOfOldRegion.latitude + oldRegion.span.latitudeDelta/4.0, centerPointOfOldRegion.longitude) 
    let newRegion = MKCoordinateRegionMake(centerPointOfNewRegion, oldRegion.span) 
    worldView.setRegion(newRegion, animated: true) 
} 
Смежные вопросы