使用 MapKit 将视图集中到用户位置的按钮
Button to center view to user location using MapKit
MapKit 中是否有专门的按钮将相机置于用户位置的中心?还是我必须手动创建按钮并切换 mapView.showsUserLocation = true
?
您需要获取用户位置坐标并设置区域。
- (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];
Swift 4:
let trackButton = MKUserTrackingBarButtonItem.init(mapView: mapView)
trackButton.target = self
trackButton.action = #selector(ViewController.track)
toolbar.items?.append(trackButton)
来晚了,啊,不过我刚找到函数:
CLLocationManager.requestLocation()
因此,一旦您正确设置了您的 locationManager(使用 requestAlwaysAuthorization),您就可以在您想要将地图以您自己的位置为中心的任何地方调用它:)
这种方式运行良好(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)
}
...
}
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)
}
MapKit 中是否有专门的按钮将相机置于用户位置的中心?还是我必须手动创建按钮并切换 mapView.showsUserLocation = true
?
您需要获取用户位置坐标并设置区域。
- (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];
Swift 4:
let trackButton = MKUserTrackingBarButtonItem.init(mapView: mapView)
trackButton.target = self
trackButton.action = #selector(ViewController.track)
toolbar.items?.append(trackButton)
来晚了,啊,不过我刚找到函数:
CLLocationManager.requestLocation()
因此,一旦您正确设置了您的 locationManager(使用 requestAlwaysAuthorization),您就可以在您想要将地图以您自己的位置为中心的任何地方调用它:)
这种方式运行良好(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)
}
...
}
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)
}