黑色和白色覆盖MKMapView

我有一个MKMapView,并添加覆盖(MKOverlay)。

我希望覆盖层使地图视图下方显示黑白(即单色)。 有没有办法做到这一点?

(我想我可以使覆盖半透明的黑色/灰色,但这不是我想要的确切效果。)

系统详细信息:在Xcode 4.2中开发iOS 5应用程序。

最糟糕的是iOS上还没有的最合适的路线是:

你的MKOverlay在某些时候被用来创build一个MKOverlayView ,它将有一个CALayerUIView下降。 您可以将CIFilter作为compositingFilterCALayer ,这决定了视图如何与背景合成。 你可以附加一个CIColorMonochrometypes的filter。

由于没有这个选项,你将不得不跳过一些主要的障碍来为自己完成这项工作。 您可能需要实现您自己的自定义MKOverlayView ,它的drawView使用Apple QA1703中给出的技术来获取相关区域中的地图视图的像素内容(尽pipe如此,请注意不要以无限recursion循环结束),把它们变成黑白,并把它们当作你的看法。

这是值得进一步调查的东西,还是你会更快乐地取代效果,而不是真的钻研这个东西?

我需要在地图上进行相同的颜色操作,并且我决定将整个地图制作成黑白的可能是更好的解决scheme,下面是您可以这样做的方法:

  1. 创造了新的形象CGcontex
  2. 在新的CGcontext中渲染地图
  3. 从当前的CGcontext获得UIImage
  4. 结果应用CIFilter到UIImage并得到了CIImage
  5. 在CIContext中呈现CIImage,并得到CGImageRef
  6. 从CGImageRef创buildUIImage
  7. 添加subviewview到苹果地图视图
  8. 将结果图像设置为该图像视图

这是一些脏代码来做到这一点:

  self.drawContext = [[CIContext alloc] init]; [self.monochromeSubView removeFromSuperview]; UIGraphicsBeginImageContext(self.appleMapView.bounds.size); UIImage *mySourceImage = UIGraphicsGetImageFromCurrentImageContext(); CIImage *newMyCiImage = [[CIImage alloc] initWithImage:mySourceImage]; CIFilter *newMyMonochromeFilter = [CIFilter filterWithName:@"CIPhotoEffectTonal"]; [newMyMonochromeFilter setValue:newMyCiImage forKey:kCIInputImageKey]; CIImage *newMyfilteredCIImage = newMyMonochromeFilter.outputImage; CGImageRef myOutputImageRef = [self.drawContext createCGImage:newMyfilteredCIImage fromRect:newMyfilteredCIImage.extent]; UIImage *newMyImage = [[UIImage alloc] initWithCGImage:myOutputImageRef]; self.monochromeSubView.image = newMyImage; [self.appleMapView addSubview:self.monochromeSubView]; CGImageRelease(myOutputImageRef); UIGraphicsEndImageContext();