मेरे पास इनमें से किसी भी उत्तर के साथ बहुत भाग्य नहीं था। अपने खुद के चुटकी करना सिर्फ इतना संघर्ष किया। मैं ऐसे मामलों में दौड़ रहा था जहां सामान्य ज़ूम मेरे अपने चुटकी के साथ ज़ूम कर सकता था।
- (void) mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
MKCoordinateRegion region = mapView.region;
//...
// adjust the region.center
//...
mapView.region = region;
}
मैं क्या पाया गया कि कोई प्रभाव नहीं पड़ा था:
मूल रूप से, मैं की तरह कुछ करने के लिए मूल पोस्टर के रूप में की कोशिश की। मैंने NSLog
के माध्यम से भी खोज की है कि जब भी मैं region
या centerCoordinate
प्रोग्रामेटिक रूप से सेट करता हूं तो यह विधि भी आग लग जाएगी। जिसने सवाल उठाया: "उपरोक्त नहीं, अगर यह काम करता है तो अनंत?"
तो मैं conjecturing रहा हूँ और hypothesizing अब यह है कि जब उपयोगकर्ता ज़ूम/पुस्तक/घुमा हो रहा है, MapView किसी भी तरह का दमन करता है या ध्यान नहीं देता है क्षेत्र के लिए बदल जाता है। मध्यस्थता के बारे में कुछ कार्यक्रम संबंधी समायोजन नपुंसक बना देता है।
अगर ऐसा है समस्या, तो शायद regionDidChanged:
अधिसूचना के बाहर क्षेत्र समायोजन प्राप्त करने की कुंजी है। और चूंकि कोई समायोजन एक और अधिसूचना को ट्रिगर करेगा, इसलिए यह महत्वपूर्ण है कि यह निर्धारित करने में सक्षम हो कि अब समायोजित नहीं किया जाए। इससे मुझे निम्नलिखित कार्यान्वयन का सामना करना पड़ा (जहां subject
केंद्र समन्वय की आपूर्ति कर रहा है कि मैं बीच में रहना चाहता हूं):
- (void) recenterMap {
double latDiff = self.subject.coordinate.latitude self.mapView.centerCoordinate.latitude;
double lonDiff = self.subject.coordinate.longitude - self.mapView.centerCoordinate.longitude;
BOOL latIsDiff = ABS(latDiff) > 0.00001;
BOOL lonIsDiff = ABS(lonDiff) > 0.00001;
if (self.subject.isLocated && (lonIsDiff || latIsDiff)) {
[self.mapView setCenterCoordinate: self.subject.coordinate animated: YES];
}
}
- (void) mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
if (self.isShowingMap) {
if (self.isInEdit) {
self.setLocationButton.hidden = NO;
self.mapEditPrompt.hidden = YES;
}
else {
if (self.subject.isLocated) { // dispatch outside so it will happen after the map view user events are done
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^{
[self recenterMap];
});
}
}
}
}
देरी जहां इसे वापस स्लाइड करता है, वह भिन्न हो सकता है, लेकिन यह वास्तव में बहुत अच्छी तरह से काम करता है। और जब यह हो रहा है, तो नक्शे पर बातचीत ऐप्पल-एस्क्यू रहती है।
स्रोत
2015-05-14 00:32:45
मुझे इसे पहले करना था लेकिन इसे एक अलग तरीके से संभाला था। मैंने MKMapView के साथ बातचीत को अक्षम कर दिया और इसके ऊपर एक दृश्य में चुटकी इशारा पहचानकर्ता जोड़ा। फिर मैंने पिंच जेस्चर को इसी ज़ूम स्तर पर परिवर्तित कर दिया। तो अपने खुद के चुटकी-टू-ज़ूम को कार्यात्मक रूप से बहुत रोलिंग करना। यह देखकर यह आपके प्रश्न का सीधे जवाब नहीं देता है, अगर यह आपके लिए एक व्यवहार्य विकल्प है तो मैं कोड के साथ उत्तर में पोस्ट करूंगा। – random