可以自定义MKUserTrackingBarButtonItem吗?

时间:2015-04-02 20:20:42

标签: swift uinavigationcontroller xcode6 mkmapview mkuserlocation

我正在使用 MKUserTrackingBarButtonItem 找到 MKMapView 。我已经以编程方式将其作为navigationItem添加到导航控制器上。我的问题是:

  1. 我可以自定义MKUserTrackingBarButtonItem吗? 示例:我的导航控制器有蓝色背景,我需要设置我的MKUserTrackingBarButtonItem外观符合导航控制器。相反,它在箭头周围显示一个白色方块。我会改变这个。
  2. 可以从导航控制器移动我的MKUserTrackingBarButtonItem并将其直接放在我的地图上吗?
  3. 由于

2 个答案:

答案 0 :(得分:2)

据我所知,您定制用户跟踪按钮的能力有限。你可以改变颜色。为了让按钮离开导航栏,你必须在mapView中添加一个UIToolbar,设置工具栏的框架大小,使其显示在你喜欢的位置,然后将mkusertracking按钮作为项添加到工具栏中,具有灵活的空间根据需要添加,以便正确居中按钮。

这是我实施它的方式(到目前为止):

    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+开始,现在有一个MKUserTrackingButton,它是一个UIView子类。因此,如果你在iOS 11下不需要任何东西,只需使用按钮和子类或自定义你想要的一切。 Apple Docs for MKUserTrackingButton

答案 1 :(得分:-1)

这会将mapView动画回用户当前位置。您可以从您创建的任何自定义按钮调用此功能。

@IBAction func resetMapCurrentLocation(sender: AnyObject) {
    mapView.userTrackingMode = RMUserTrackingModeFollow
}