mi serviva stesse manipolazioni di colore sulla carta, e ho deciso che, per rendere l'intera mappa in bianco e nero può essere la soluzione migliore, ecco come si può fare questo:
- creato nuove imageCGcontex
- mappa reso in new CGcontext
- ottenuto UIImage dalla corrente CGcontext
- applicato CIFilter a UIImage e ottenuto CIImage come risultato
- reso CIImage in CIContext e ottenuto CGImageRef come risultato
- creato UIImage da CGImageRef
- immagine set di risultati aggiunti sub ImageView ad Apple guarda la mappa a quella IMAGEVIEW
Ecco il codice sporco per fare questo:
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();
Qui vai - la mappa è in nero e w colori hite. Per eseguire dinamicamente questa operazione per spostare la mappa monocromatica insieme al gesto dell'utente, è possibile creare una sottoclasse di riconoscimento gesti, aggiungerla direttamente alla visualizzazione mappa. Quindi su ogni chiamata touchesMoved
puoi chiamare questa funzione di ridisegno mentre riutilizzi il contesto che hai creato.Ho provato questo con la mappa delle mele che occupa circa 1/3 dello schermo e ha prodotto prestazioni estremamente basse (circa 3 FPS su iPhone 5s) e ci sono alcuni bug da correggere, come ad esempio: la mappa di volo con il gesto di scorrimento mentre l'immagine monocromatica è statico, la frequenza dei pin della mappa è ridisegnare, ridisegnare o animare ogni pop-up visualizzato in risposta a toccare. Puoi provare a renderizzare la mappa in CALayer, non in Context, Apple consiglia di migliorare le prestazioni, ma considerando tutto quanto sopra suppongo che se vuoi vedere elementi filtrati dinamici è meglio usare un'altra mappa più personalizzabile: GoogleMap o MapBox.
fonte
2017-10-18 07:55:21
Qualcuno ha fatto questo? Non sta facendo filtri come una fucilazione? questa fica non si applica solo all'overlay e non alla mappa sottostante? – subharb
http://developer.apple.com/library/ios/#qa/qa1703/_index.html - link non funzionante _ (Siamo spiacenti, la pagina non è stata trovata.) _ – Nazir