黑色和白色覆盖MKMapView
我有一个MKMapView,并添加覆盖(MKOverlay)。
我希望覆盖层使地图视图下方显示黑白(即单色)。 有没有办法做到这一点?
(我想我可以使覆盖半透明的黑色/灰色,但这不是我想要的确切效果。)
系统详细信息:在Xcode 4.2中开发iOS 5应用程序。
最糟糕的是iOS上还没有的最合适的路线是:
你的MKOverlay
在某些时候被用来创build一个MKOverlayView
,它将有一个CALayer
从UIView
下降。 您可以将CIFilter
作为compositingFilter
到CALayer
,这决定了视图如何与背景合成。 你可以附加一个CIColorMonochrome
types的filter。
由于没有这个选项,你将不得不跳过一些主要的障碍来为自己完成这项工作。 您可能需要实现您自己的自定义MKOverlayView
,它的drawView
使用Apple QA1703中给出的技术来获取相关区域中的地图视图的像素内容(尽pipe如此,请注意不要以无限recursion循环结束),把它们变成黑白,并把它们当作你的看法。
这是值得进一步调查的东西,还是你会更快乐地取代效果,而不是真的钻研这个东西?
我需要在地图上进行相同的颜色操作,并且我决定将整个地图制作成黑白的可能是更好的解决scheme,下面是您可以这样做的方法:
- 创造了新的形象CGcontex
- 在新的CGcontext中渲染地图
- 从当前的CGcontext获得UIImage
- 结果应用CIFilter到UIImage并得到了CIImage
- 在CIContext中呈现CIImage,并得到CGImageRef
- 从CGImageRef创buildUIImage
- 添加subviewview到苹果地图视图
- 将结果图像设置为该图像视图
这是一些脏代码来做到这一点:
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();