我想得到一个结果MKMapRect,它在所有方向上比当前visibleMapRect
大10-20%。如果这是一个CGRect,我会使用带有负x和y值的CGRectInset,为我提供一个反向插图(即一个更大的rect)。不幸的是,MKMapInset不支持负插入值,所以它并不那么容易。
如果map rect的值是可识别单位但原点x和y值大约为4.29445e + 07,宽度/高度为2500-3000,则可能更容易。
我写一个类别手动执行此操作大约需要10秒钟,但我想确保先没有遗漏任何内容。有没有更简单的方法来扩展MKMapRect?
答案 0 :(得分:26)
在iOS7中,rectForMapRect:
和mapRectForRect:
已被弃用,现在属于MKOverlayRenderer
类。我宁愿建议使用MapView
mapRectThatFits: edgePadding:
方法。以下是示例代码:
MKMapRect visibleRect = self.mapView.visibleMapRect;
UIEdgeInsets insets = UIEdgeInsetsMake(50, 50, 50, 50);
MKMapRect biggerRect = [self.mapView mapRectThatFits:visibleRect edgePadding:insets];
2017年最新的Swift ......
func updateMap() {
mkMap.removeAnnotations(mkMap.annotations)
mkMap.addAnnotations(yourAnnotationsArray)
var union = MKMapRectNull
for p in yourAnnotationsArray {
// make a small, say, 50meter square for each
let pReg = MKCoordinateRegionMakeWithDistance( pa.coordinate, 50, 50 )
// convert it to a MKMapRect
let r = mkMapRect(forMKCoordinateRegion: pReg)
// union all of those
union = MKMapRectUnion(union, r)
// probably want to turn on the "sign" for each
mkMap.selectAnnotation(pa, animated: false)
}
// expand the union, using the new #edgePadding call. T,L,B,R
let f = mkMap.mapRectThatFits(union, edgePadding: UIEdgeInsetsMake(70, 0, 10, 35))
// NOTE you want the TOP padding much bigger than the BOTTOM padding
// because the pins/signs are actually very tall
mkMap.setVisibleMapRect(f, animated: false)
}
答案 1 :(得分:5)
如何使用visibleMapRect
将CGRect
转换为rectForMapRect:
,使用CGRect
获取新的CGRectInset
,然后将其转换回{{1}与MKMapRect
?
答案 2 :(得分:0)
对Swift 4进行了精炼和更正user2285781's answer:
<div id="container1" display:inline-block">
<script>
var chart_data = "{$chart_data}";
{literal}
function drawChart() {
// Define the chart to be drawn
var data = new google.visualization.DataTable(chart_data);
data.addColumn('string', 'Status');
data.addColumn('number', 'Percentage');
/*
data.addRows([
['Passed', 45.0],
['Failed', 26.8],
['Blocked', 12.8],
['Not Run', 8.5]
]);
*/
// Set chart options
var options = {'title':'Overall Test Progress',
'width':420,
'height':310};
// Instantiate and draw the chart.
var chart = new google.visualization.PieChart(document.getElementById('container1'));
chart.draw(data, options);
}
google.charts.setOnLoadCallback(drawChart);
</script>
{/literal}
答案 3 :(得分:0)
用于 Xcode 10 +,Swift 4.2
的简单干净的解决方案只需为地图的边距设置边缘插图:
self.mapView.layoutMargins = UIEdgeInsets(top: 8, right: 8, bottom: 8, left: 8)
self.mapView.showAnnotations(map.annotations, animated: true)
请告诉我们它是否适合您。