iOS – MKMapView showAnnotations:animated:with padding?

我想能够放大我的MKMapView,以适应它的注释。 我已经设法使用iOS7的showAnnotations方法。 但我也想从地图视图边框添加一些填充或插入。 这是因为我有一个半透明的视图,覆盖了我的地图的顶部,我不希望注释成为这个视图的后面。 我试过这个:

 [self.mapView showAnnotations:annotations animated:YES]; [self.mapView setVisibleMapRect:self.mapView.visibleMapRect edgePadding:UIEdgeInsetsMake(100, 20, 10, 10) animated:NO]; 

但是这不是我所希望的。 任何想法,我如何能做到这一点不同?

你正在做正确的方法。 尝试改变填充,你会看到不同之处。

换句话说,你的代码中必须有别的东西来防止改变视图

编辑:我完全错了。 尝试这个:

创build一个实例variables

 BOOL _mapNeedsPadding; 

并将其初始化为NO;

然后将你的mapView委托设置为self,并添加一个到你的类标题

然后添加到你的class级

 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{ if(_mapNeedsPadding){ _mapNeedsPadding = NO; [self.mapView setVisibleMapRect:self.mapView.visibleMapRect edgePadding:UIEdgeInsetsMake(100, 20, 10, 10) animated:YES]; } } 

最后调用你的showAnnotations函数,像这样:

 _mapNeedsPadding = YES; [self.mapView showAnnotations:annotations animated:YES]; 

showAnnimation将触发regionDidChangeAnimated函数。 您需要在更改visibleMapRect之后将_mapNeedsPadding设置为NO,因为此函数(setVisibleMapRect:self)也会触发regionDidChangeAnimated。

希望这可以帮助 !

你也可以简单地使用

 [self.mapView showAnnotations:annotations animated:YES]; self.mapView.camera.altitude *= 1.4; 

缩小一点。 适合我。

从iOS8开始, MKMapView具有layoutMargin属性。 当设置这个时, centerRegion:showAnnotations:和试图在地图视图中适合一个矩形的所有方法都将考虑到上述布局边距。

如果半透明视图的高度为40点,并附加到地图视图的顶部,那么设置mapView.layoutMargin = UIEdgeInsetMake(40, 0, 0, 0)将会发挥魔力。

如果以iOS7为目标,则地图视图使用其包含控制器的顶部和底部布局指南来抵消其内容。 所以你可以覆盖控制器的topLayoutGuide方法来返回所需的长度。

 class ViewController: UIViewController { override var topLayoutGuide: UILayoutSupport { return MapLayoutGuide(length: 40) } } class MapLayoutGuide: NSObject, UILayoutSupport { var length: CGFloat init(length: CGFloat) { self.length = length super.init() } @available(iOS 9.0, *) var bottomAnchor: NSLayoutYAxisAnchor { return NSLayoutYAxisAnchor() } @available(iOS 9.0, *) var topAnchor: NSLayoutYAxisAnchor { return NSLayoutYAxisAnchor() } @available(iOS 9.0, *) var heightAnchor: NSLayoutDimension { return NSLayoutDimension() } }