mapView:regionDidChangeAnimated:从不调用

Bkd*_*kdD 0 objective-c mkmapview ios

在故事板中,我有一个与视图控制器关系的导航控制器.

视图控制器包含MKMapView.

视图控制器还在Identity Inspector - > Custom Class中设置为自定义控制器:MapViewController.

这是MapViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import "MarkerAnnotation.h"
#import "MarkerButton.h"
#import "MainMapView.h"

@interface MapViewController : UITableViewController <MKMapViewDelegate, CLLocationManagerDelegate>

@property (weak, nonatomic) IBOutlet MKMapView *localMapView;

@end
Run Code Online (Sandbox Code Playgroud)

localMapView通过"引用Outlets"链接到放置在故事板上的ViewController中的MKMapView,我已经在.m文件的代码中使用它来设置注释或获取"bounds.origin".

每次用户移动地图时,我都需要运行一些行来更新地图.所以,我试图在.m文件上实现mapView:regionDidChangeAnimated:但是从不调用它.

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"Region changed");
}
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个MKMapView的自定义子类,在该类上实现该方法,但也没有调用.(你仍然可以在.h文件的导入中看到,MainMapView.h ...我仍然没有删除导入)

有什么我想念的吗?我是否必须在地图和当前类之间设置更多连接?

否则,每次地图移动时我是否有另一种触发事件的方法?

小智 5

当委托方法没有被调用时,首先要检查的是对象的delegate属性是设置还是已连接.

(声明一个类在.h文件中实现委托协议是不一样的 - 只是让编译器知道应该对类代码实现的期望,以便它可以提供编译时警告.)

因此,除了引用插座之外,还必须将地图视图的委托插座连接到文件所有者或代码(通常在viewDidLoad中)mapView.delegate = self;.