2

MKUserTrackingBarButtonItem を使用してMKMapViewを見つけています。プログラムでナビゲーション コントローラーに navigationItem として追加しました。私の質問は次のとおりです。

  1. MKUserTrackingBarButtonItem をカスタマイズできますか? 例: ナビゲーション コントローラーの背景が青色で、MKUserTrackingBarButtonItem の外観をナビゲーション コントローラーに準拠するように設定する必要があります。代わりに、矢印の周りに白い四角が表示されます。私はこれを変更します。
  2. MKUserTrackingBarButtonItem をナビゲーション コントローラーから移動して、マップに直接配置することはできますか?

ありがとう

4

2 に答える 2

2

私が知る限り、ユーザー トラッキング ボタンをカスタマイズする機能は限られています。色を変更できます。ボタンをナビゲーション バーから外すには、UIToolbar を mapView に追加する必要があります。ツールバーのフレーム サイズを設定して、好みの場所に表示されるようにしてから、mkusertrackingbutton を項目としてツールバーに追加し、柔軟なスペースを使用します。ボタンを正しく中央に配置するために、必要に応じて追加されます。

これが私がそれを実装した方法です(これまでのところ):

    func setupUserTrackingButton() {
      let trackingButton: MKUserTrackingBarButtonItem = MKUserTrackingBarButtonItem.init(mapView: mapView)
      trackingButton.customView?.tintColor = UIColor.black
      trackingButton.style = UIBarButtonItemStyle.plain
      trackingButton.customView?.size = CGSize(width: 50, height: 50)
      let originPoint: CGPoint = CGPoint(x: mapView.width-70,y: mapView.height-85)
      let lighterGreyColor: UIColor = UIColor(colorLiteralRed: 125, green: 125, blue: 125, alpha: 1.0)

//need to implement this rounded view in order to get the box to look consistent with the mkusertracking button API
      let roundedSquare: UIView = UIView(frame: CGRect(origin: originPoint, size: CGSize(width: 50, height: 50)))
      roundedSquare.backgroundColor = lighterGreyColor
      roundedSquare.layer.cornerRadius = 5
      roundedSquare.layer.masksToBounds = true

      let toolBarFrame = CGRect(origin: CGPoint(x: 3, y: 3) , size: CGSize(width: 44, height: 44))
//You may have to subclass toolbar in order to get the right coloring
      let toolbar = UIToolbar.init(frame: toolBarFrame)
      let flex: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
      toolbar.items = [flex, trackingButton, flex]

      roundedSquare.addSubview(toolbar)
      mapView.addSubview(roundedSquare)

}

それ以外の場合は、ボタンをサブクラス化し、コア グラフィックス アニメーションなどの他の機能を基本的に組み込む必要がありますが、これは少し手間がかかります。お役に立てれば。

編集: iOS 11.0 以降では、UIView サブクラスである MKUserTrackingButton が追加されました。したがって、iOS 11 で何も必要ない場合は、ボタンとサブクラスを使用するか、必要なものをすべてカスタマイズしてください。 MKUserTrackingButton の Apple ドキュメント

于 2017-01-10T17:11:03.260 に答える
0

これにより、mapView がアニメーション化され、ユーザーの現在の場所に戻ります。この関数は、作成した任意のカスタム ボタンから呼び出すことができます。

@IBAction func resetMapCurrentLocation(sender: AnyObject) {
    mapView.userTrackingMode = RMUserTrackingModeFollow
}
于 2015-04-27T20:50:03.550 に答える