2016-01-14 12 views
5

MapKitには、ユーザーの位置にカメラを配置する専用のボタンがありますか?またはボタンを手動で作成してmapView.showsUserLocation = trueをトグルする必要がありますか?MapKitを使用してボタンをユーザーの位置に合わせる

+0

可能な複製:http://stackoverflow.com/a/6170026/3051458 –

+1

@Ramesh_Tあなたは両方の質問を読んでいますか?私はちょうどユーザーの上にカメラを置くことを望んでいない、私は、Google/Apple Mapsのように、それを行うボタンが欲しい – Xernox

答えて

5

をこの方法では、(スウィフト)も実行し、ボタンをカスタマイズできます。

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) 
    } 
    ... 
} 

スウィフト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

コードの1行NICE! – Jeff

1

ユーザーの位置座標を取得し、領域を設定する必要があります。

- (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]; 
} 

解決方法2:

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

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

スウィフト4:遅刻

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

toolbar.items?.append(trackButton) 
+0

それは迅速ではないが、大丈夫です。では、自分のボタンを手動で作成しなければならないということは何ですか?このようなものはありません: 'mapView.enableButtonThatDoesCenterViewOverUser = true'。 – Xernox

+0

MKMapCameraは、マップ上のポイントを観測している視点として機能します。 –

+1

あなたはどういうことを言っていますか?私は手動でユーザーを見渡す方法を尋ねていません - 私はそれを行う方法を知っています。 MapKitはビルドインボタンを提供していますか?MapKitは北向きの視線方向を変更するためのコンパスをほとんど提供していません。 – Xernox

3

は、AHAHが、私はちょうど機能が見つかりました:あなた一度そう

CLLocationManager.requestLocation() 

正しくあなたのlocationManagerを設定します(with requestAlwaysAuth orization)あなた自身の場所にマップをセンタリングしたいところはどこでもあなたがそれを呼び出すことができます:)

関連する問題