我最近开始学习objectiveC并开始在iOS6中开发应用程序。
现在,我正在尝试将其转换为iOS7并面临MKMap的问题。
在iOS6中,我使用的是viewForOverlay。
在iOS7中,我将其更改为renderForOverlay。但是,我的应用程序不是调用mapView:rendererForOverlay。以下是我的代码。感谢您的帮助。
- (void) drawPolyline:(NSArray *)locations
{
[mapView setDelegate:self];
...
...
self.polyline = [MKPolyline polylineWithCoordinates:locationCoordinate2DArray count:numberOfLocations];
free(locationCoordinate2DArray);
[mapView addOverlay:self.polyline];
[mapView setNeedsDisplay];
}
- (MKOverlayRenderer*)mapView:(MKMapView*)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
MKPolylineRenderer* lineView = [[MKPolylineRenderer alloc] initWithPolyline:self.polyline];
lineView.strokeColor = [UIColor blueColor];
lineView.lineWidth = 7;
return lineView;
}
答案 0 :(得分:15)
我假设您通过MKMapViewDelegate
声明在头文件中声明了@interface
委托:
但是,您是否在viewDidLoad
(或您认为合适的地方)方法中分配了代理?
self.mapView.delegate = self;
答案 1 :(得分:2)
与其他人一样,请确保在添加delegate
之前设置它们。使用addOverlay:level:
方法,因为addOverlay:
将被弃用(根据标题中的注释)。
我的问题是愚蠢的。因为我的多边形点,我错误地转换了lat和long。如果他们仍然没有出现,请务必仔细检查。
您也可以尝试在多边形上记录pointCount
以确保它们设置正确。
相关,这是如何在Swift中完成的:
// Get your coordinates from somewhere as an [CLLocationCoordinate2D] array
// If you already have them, make a local mutable copy
var coordinates = [CLLocationCoordinate2D]()
// Create your polygon
let polygon = MKPolygon(coordinates: &coordinates, count: coordinates.count)
希望这可以节省你一些时间!
答案 2 :(得分:1)
好的,我有同样的问题,最后找到了案子。
我们必须使用[MKMapView addOverlay: level:]
而不是[MKMapView addOverlay:]
。
它触发rendererForOverlay
而不是代理的viewForOverlay
。
希望这对iOS 7爱好者有所帮助!
答案 3 :(得分:1)
如果locationCoordinate2DArray,mapView:rendererForOverlay
中只有一个点不会被调用。
答案 4 :(得分:0)
我刚用这个方法完成了实验,我发现只有 nib文件放置MKMapView 和@property (weak, nonatomic) IBOutlet MKMapView *mapView;
修复了这个问题。这里也是checklist。
答案 5 :(得分:0)
对我来说,解决方案包括两个步骤:
答案 6 :(得分:0)
对于像我这样的人来说,这是一个暗示,这些人为此与IOS 13进行了斗争。看起来,因为IOS 13忽略了类似的内容:
// self is a MKTileOverlayRenderer
// the code is called, if a method has produced a tile for a given MKMapRect
// tell the system that we are ready
DispatchQueue.main.async(execute: {
// invalidate the mapRect
self.setNeedsDisplay(mapRect)
})
此代码在IOS 10-IOS 12中运行良好,但是现在您必须将zoomScale添加到setNeedsDisplay()中,否则它似乎被IOS 13忽略了……花了我4个小时来整理它;- )
self.setNeedsDisplay(mapRect, zoomScale: zoomScale)