是否有任何功能可以跟踪Mapkit中当前可见的区域?

时间:2015-09-09 07:48:33

标签: ios swift mapkit cllocationmanager

以下是我为自己的应用所做的工作,如您所见,顶部是mapView,下面是TableView。我想要实现的是当我放大(移动或缩小)到mapView中的某个区域时,tableView向下可以显示相应的用户信息。 为了实现该功能,这是我的解决方案:

  1. 我在地图上做了几个不可见的协调,这些协调是包含用户信息的区域。

  2. 我想使用mapView.visibleMapRect获取当前可见区域,然后我想使用MKMapRectContainsPoint(mapRect, invisibleCoordination)检查当前可见区域是否包含某些不可见的协调,如果MKMapRectContainsPoint返回true,然后我将发出Web服务请求,然后将其显示在TableView上。

  3. 但是,我不知道在哪里放这些功能,如果我想解决这个问题,我必须继续跟踪mapView.visibleMapRect和MKMapRectContainsPoint。我尝试locationManager(:didUpdateLocations),但此功能在mapView呈现期间不会继续调用。

    我不确定我的解决方案是否合适,如果你能告诉我一个更好的解决方案,我期待看到它。

    enter image description here

1 个答案:

答案 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