我正在使用MKOverlayRenderer和此代码在地图上渲染UIImage
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
if (_overlayImage == nil)
{
return;
}
if (_overlayImage == (id)[NSNull null])
{
return;
}
CGImageRef imageReference = _overlayImage.CGImage;
MKMapRect theMapRect = self.overlay.boundingMapRect;
CGRect theRect = [self rectForMapRect:theMapRect];
//CGContextSetInterpolationQuality(context, kCGInterpolationNone);
CGContextSetInterpolationQuality(context, self.interpolation);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -theRect.size.height);
CGContextDrawImage(context, theRect, imageReference);
}
我还有自定义类实现协议MKOverlay。此类包含图像列表并设置了渲染器。我在map delagate中设置了这个
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
if ([overlay isMemberOfClass:[MyMapOverlay class]])
{
MyMapOverlay * myOverlay = (MyMapOverlay *)overlay;
MyMapOverlayRenderer *overlayView = [[MyMapOverlayRenderer alloc] initWithOverlay:overlay overlayImage:myOverlay.activeImage transparency:125];
[myOverlay SetRenderer:overlayView];
return overlayView;
}
}
现在我在覆盖中更改activeImage并调用
[_renderer setNeedsDisplay];
一切正常 - 图像已经改变。但它很慢,动画很迟钝:(
有什么想法吗?