以下是我为自己的应用所做的工作,如您所见,顶部是mapView
,下面是TableView
。我想要实现的是当我放大(移动或缩小)到mapView
中的某个区域时,tableView
向下可以显示相应的用户信息。
为了实现该功能,这是我的解决方案:
我在地图上做了几个不可见的协调,这些协调是包含用户信息的区域。
我想使用mapView.visibleMapRect
获取当前可见区域,然后我想使用MKMapRectContainsPoint(mapRect, invisibleCoordination)
检查当前可见区域是否包含某些不可见的协调,如果MKMapRectContainsPoint
返回true,然后我将发出Web服务请求,然后将其显示在TableView
上。
但是,我不知道在哪里放这些功能,如果我想解决这个问题,我必须继续跟踪mapView.visibleMapRect和MKMapRectContainsPoint
。我尝试locationManager(:didUpdateLocations)
,但此功能在mapView
呈现期间不会继续调用。
我不确定我的解决方案是否合适,如果你能告诉我一个更好的解决方案,我期待看到它。
答案 0 :(得分:2)
MKMapViewDelegate中有一个方法,每次更改区域时都会调用该方法。我认为这是你要找的那个。
当设备的位置发生变化时,会调用之前尝试过的方法didUpdateLocations。
MKMapViewDelegate
夫特:
optional func mapView(_ mapView: MKMapView!, regionDidChangeAnimated animated: Bool)
目标-C:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
所以在你的情况下
夫特:
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate
{
@IBOutlet weak var mapView: MKMapView! = nil
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
mapView.delegate = self
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool)
{
// Do what you want to do here!
}
}
目标-C:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface ViewController : UIViewController < MKMapViewDelegate >
@property (nonatomic, weak) IBOutlet MKMapView *mapView;
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate = self;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
// Do what you want to do here
}
@end