के साथ ग्रेडियंट पॉलीलाइन मैं ओवरले (एमकेओवरले) का उपयोग कर एमकेमैप व्यू पर एक मार्ग का पता लगाने की कोशिश कर रहा हूं। हालांकि, वर्तमान गति के आधार पर, यदि रंग बदल रहा है, तो मार्ग का पता लगाने के दौरान नाइके ऐप की तरह ढाल के साथ कुछ करना चाहते हैं (उदाहरण के लिए, यदि उपयोगकर्ता 65 मील प्रति घंटे से 30 मील प्रति घंटे तक चला रहा है तो हरे से नारंगी तक)। मैंमैपकिट आईओएस
// Create a c array of points.
MKMapPoint *pointsArray = malloc(sizeof(CLLocationCoordinate2D) * 2);
// Create 2 points.
MKMapPoint startPoint = MKMapPointForCoordinate(CLLocationCoordinate2DMake(oldLatitude, oldLongitude));
MKMapPoint endPoint = MKMapPointForCoordinate(CLLocationCoordinate2DMake(newLatitude, newLongitude));
// Fill the array.
pointsArray[0] = startPoint;
pointsArray[1] = endPoint;
// Erase polyline and polyline view if not nil.
if (self.routeLine != nil)
self.routeLine = nil;
if (self.routeLineView != nil)
self.routeLineView = nil;
// Create the polyline based on the array of points.
self.routeLine = [MKPolyline polylineWithPoints:pointsArray count:2];
// Add overlay to map.
[self.mapView addOverlay:self.routeLine];
// clear the memory allocated earlier for the points.
free(pointsArray);
// Save old coordinates.
oldLatitude = newLatitude;
oldLongitude = newLongitude;
असल:
इसलिए हर 20 मीटर की दूरी, मैं पुराने से एक ओवरले के नए निर्देशांक का उपयोग कर जोड़ने:
यहाँ मैं क्या चाहते का एक स्क्रीनशॉट बहुत सारे ओवरले जोड़ना। तब मैं इस छोटे से लाइन ड्राइंग पर ढाल बनाना चाहेंगे, तो मैं ओवरले प्रतिनिधि में ऐसा करने की कोशिश कर रहा हूँ:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
MKOverlayView* overlayView = nil;
if(overlay == self.routeLine) {
// If we have not yet created an overlay view for this overlay, create it now.
if(self.routeLineView == nil) {
self.routeLineView = [[[MKPolylineView alloc] initWithPolyline:self.routeLine] autorelease];
if (speedMPH < 25.0) {
self.routeLineView.fillColor = [UIColor redColor];
self.routeLineView.strokeColor = [UIColor redColor];
}
else if (speedMPH >= 25.0 && speedMPH < 50.0) {
self.routeLineView.fillColor = [UIColor orangeColor];
self.routeLineView.strokeColor = [UIColor orangeColor];
}
else {
self.routeLineView.fillColor = [UIColor greenColor];
self.routeLineView.strokeColor = [UIColor greenColor];
}
// Size of the trace.
self.routeLineView.lineWidth = routeLineWidth;
// Add gradient if color changed.
if (oldColor != self.routeLineView.fillColor) {
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.routeLineView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[oldColor CGColor], (id)[self.routeLineView.fillColor CGColor], nil];
[self.routeLineView.layer insertSublayer:gradient atIndex:0];
}
// Record old color for gradient.
if (speedMPH < 25.0)
oldColor = [UIColor redColor];
else if (speedMPH >= 25.0 && speedMPH < 50.0)
oldColor = [UIColor orangeColor];
else
oldColor = [UIColor greenColor];
}
overlayView = self.routeLineView;
}
return overlayView;
}
मैं ढाल इस तरह से जोड़ने के लिए कोशिश कर रहा हूँ, लेकिन मुझे लगता है कि यह है ऐसा करने का तरीका नहीं है क्योंकि मैं इसे काम नहीं कर सकता।
मैं उपयोगकर्ता के स्थान (स्थान वस्तु के प्रतिनिधि में) या प्रत्येक 20 मीटर से ऊपर के अपडेट पर हर बार मार्ग का पता लगा सकता हूं।
क्या आप कृपया मुझे उस पर मदद कर सकते हैं, मुझे सुझाव दे रहे हैं! धन्यवाद!
रूटलाइन और रूटलाइन व्यू कैसे घोषित किया गया है? उपरोक्त कोड किस वर्ग में है? "यह काम नहीं कर सकता" - क्या होता है? – Rayfleck
मुझे केवल उन ग्रेडियेंट्स को नहीं दिख रहा है जिन्हें मैं अपने ओवरले व्यू में जोड़ रहा हूं। 'एमकेपोलीलाइन * रूटलाइन;' और 'एमकेपोलीलाइन व्यू * रूटलाइन व्यू;', फिर हर 20 मीटर मैं एक नया बना देता हूं और इसे ओवरले के रूप में जोड़ता हूं। और ऊपर MKMapView प्रतिनिधि समारोह में मैं मानदंडों के आधार पर दृश्य बनाता हूं और इसमें ढाल जोड़ने की कोशिश करता हूं। – Dachmt