2015-09-10 6 views
1

Я пытаюсь установить MKMapView таким образом, чтобы местоположение пользователя всегда было смещено в верхнем правом углу контроллера вида, и я бы построил остальную часть моего интерфейса вокруг этого «блока».Можно ли установить фиксированное положение на экране для местоположения пользователя на MKMapView?

Есть ли способ установить фиксированную/смещенную центральную точку для MKMapView, например, таким образом, чтобы штырь всегда находился в положении x, y на экране?

Я могу предоставить набросанный пример, если у вас возникли проблемы с пониманием моей цели.

ответ

1

Я понял это только сейчас,

func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) { 
    // Define a span (for zoom) 
    let span: MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005) 

    // Get user location 
    let location = CLLocationCoordinate2D(
     latitude: userLocation.coordinate.latitude, 
     longitude: userLocation.coordinate.longitude 
    ) 

    // Get the close region for the user's location 
    // This zooms into the user's tracked location 
    let region = MKCoordinateRegion(center: location, span: span) 
    let adjusted = mapView.regionThatFits(region) 
    mapView.setRegion(adjusted, animated: true) 

    // Here we set the offset of the map to be 75% to the right 
    // and 15% from the top. Gives us a nice top right view. 
    var rect = mapView.visibleMapRect 
    let point = MKMapPointForCoordinate(location) 
    rect.origin.x = point.x - rect.size.width * 0.75 
    rect.origin.y = point.y - rect.size.height * 0.15 
    mapView.setVisibleMapRect(rect, animated: true) 
} 

Ответ Pablo A. был хорошей отправной точкой, но, к сожалению, этого было недостаточно, чтобы делать то, что я искал.

Я пошел вперед и добавил вид маски в верхней части карты, чтобы лучше визуализировать, какой интерфейс я собирался в конце.

MKMapView Example

0

Вы можете преобразовать пиксель координаты координаты на карте, чтобы знать, где добавить свой палец, и обновлять его каждый раз, когда изменяется область карта:

CGPoint fakecenter = CGPointMake(20, 20); 
CLLocationCoordinate2D coordinate = [mapView convertPoint:fakecenter toCoordinateFromView:mapView]; 
+0

Так что это в основном означает, что я бы скрыть местоположение пользователя, но сохранить следующий пользователь и использовать свой собственный палец? –

+0

На самом деле, прочитав дважды то, что вы пытаетесь сделать, вы сможете получить разницу между пользовательской координатой пользователя и предыдущей вычисленной координатой и центрировать карту в 'user location - diff'. –

+0

Раньше вычисленная координата означает значение fakecenter? –

Смежные вопросы