2016-01-14 12 views
5

MapKit'te kamerayı kullanıcı konumu üzerinden merkezleyen özel bir düğme var mı? Veya el ile düğme oluşturma ve mapView.showsUserLocation = true geçiş yapmak zorunda mıyım?MapKit kullanarak görüntüyü kullanıcı konumuna ortalamak için düğme

+0

Olası kopya: http://stackoverflow.com/a/6170026/3051458 –

+1

@Ramesh_T iki soru da okudunuz mu? Sadece kamerayı kullanıcı üzerinden ortalamak istemiyorum, bunu yapan bir düğme istiyorum, tıpkı Google/Apple Haritalar'da olduğu gibi – Xernox

cevap

5

Bu şekilde de (Swift) çalıştırır üzerinde haritanın merkezine istediğiniz yere arayabilirsin ve düğmeyi özelleştirebilirsiniz:

class YourViewController{ 
    ... 
    @IBOutlet weak var mapView:MKMapView 
    ... 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     ... 
     addMapTrackingButton() 
    } 

    func addMapTrackingButton(){ 
     let image = UIImage(named: "trackme") as UIImage? 
     let button = UIButton(type: UIButtonType.System) as UIButton 
     button.frame = CGRectMake(5, 5, 35, 35) 
     button.setImage(image, forState: .Normal) 
     button.backgroundColor = .clearColor() 
     button.addTarget(self, action: #selector(YourViewController.centerMapOnUserButtonClicked), forControlEvents:.TouchUpInside) 
     self.mapView.addSubview(button) 
    } 

    func centerMapOnUserButtonClicked() { 
     self.mapView.setUserTrackingMode(MKUserTrackingMode.Follow, animated: true) 
    } 
    ... 
} 

Swift 4:

func addMapTrackingButton(){ 
    let image = UIImage(named: "trackme") as UIImage? 
    let button = UIButton(type: UIButtonType.custom) as UIButton 
    button.frame = CGRect(origin: CGPoint(x:5, y: 25), size: CGSize(width: 35, height: 35)) 
    button.setImage(image, for: .normal) 
    button.backgroundColor = .clear 
    button.addTarget(self, action: #selector(ViewController.centerMapOnUserButtonClicked), for:.touchUpInside) 
    mapView.addSubview(button) 
} 

@objc func centerMapOnUserButtonClicked() { 
    mapView.setUserTrackingMode(MKUserTrackingMode.follow, animated: true) 
} 
+0

Tek satır kod NICE! – Jeff

1

Kullanıcının konum koordinatını almanız ve bölgeyi ayarlamanız gerekir.

- (IBAction)centerMapOnUserButtonClicked:(id)sender { 
MKCoordinateSpan span = MKCoordinateSpanMake(0.0001f, 0.0001f); 
    CLLocationCoordinate2D coordinate = self.mapView.userLocation.coordinate; 
    MKCoordinateRegion region = {coordinate, span}; 

    MKCoordinateRegion regionThatFits = [self.mapView regionThatFits:region]; 
    NSLog(@"Fit Region %f %f", regionThatFits.center.latitude, regionThatFits.center.longitude); 

    [self.mapView setRegion:regionThatFits animated:YES]; 
} 

Çözüm 2:

MKUserTrackingBarButtonItem *trackButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:mapView]; 
[trackButton setTarget:self]; 
[trackButton setAction:@selector(track:)]; 

[toolbar setItems:[NSArray arrayWithObjects:trackButton, nil] animated:YES]; 

Swift 4:

let trackButton = MKUserTrackingBarButtonItem.init(mapView: mapView) 
trackButton.target = self 
trackButton.action = #selector(ViewController.track) 

toolbar.items?.append(trackButton) 
+0

Bu hızlı değil, tamam. Demek istediğim, kendi düğmemizi el ile oluşturmam gerektiğidir. Bunun gibi bir şey yok: "mapView.enableButtonThatDoesCenterViewOverUser = true". – Xernox

+0

MKMapCamera, haritadaki bir noktayı gözlemlediğiniz bakış açısı olarak hizmet edecektir. –

+1

Ne hakkında konuşuyorsun? Kullanıcının manuel olarak nasıl görüntüleneceğini sormuyorum - nasıl yapacağımı biliyorum. MapKit'in bunu yapmak için düğmeye basmasını sağladım, çünkü MapKit, Kuzey yönünü değiştirmek için küçük bir pusula sağlıyor. – Xernox

3

ahah, geç olmak, ama sadece işlevini bulundu: Düzgün Yani

CLLocationManager.requestLocation() 

size bir kez locationManager'ınızı ayarlayın (requestAlwaysAuth ile) orization) Kendi konumu :)

İlgili konular