【问题标题】:Button to center view to user location using MapKit使用 MapKit 将视图居中显示到用户位置的按钮
【发布时间】:2018-02-27 01:39:59
【问题描述】:

MapKit 中是否有一个专门的按钮可以将摄像头置于用户位置的中心?还是我必须手动创建按钮并切换mapView.showsUserLocation = true

【问题讨论】:

  • @Ramesh_T 你读过这两个问题了吗?我不想只是将摄像头放在用户的中心,我想要一个按钮来做到这一点,就像在谷歌/苹果地图中一样
  • @Xernox 你找到解决办法了吗?

标签: ios swift mapkit


【解决方案1】:

这种方式运行良好(Swift),可以自定义按钮:

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

【讨论】:

    【解决方案2】:

    来晚了,啊,不过我才发现这个功能:

    CLLocationManager.requestLocation()
    

    因此,一旦您正确设置了您的 locationManager(使用 requestAlwaysAuthorization),您就可以在任何您想将地图放在您自己的位置中心的地方调用它:)

    【讨论】:

    • 使用此代码出错,委托必须响应 locationManager:didFailWithError:
    【解决方案3】:

    你需要获取用户位置坐标并设置区域。

    - (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)
    

    【讨论】:

    • 这不是很快,但没关系。那么你的意思是我必须手动创建自己的按钮?没有这样的东西:mapView.enableButtonThatDoesCenterViewOverUser = true.
    • MKMapCamera 将作为您观察地图上某个点的视点。
    • 你在说什么?我不是在问如何手动将用户视图居中 - 我确实知道该怎么做。我在问 MapKit 是否提供内置按钮来做到这一点,就像 MapKit 提供的小指南针可以将观察方向更改为北方。
    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多