मैं कुछ iPhone MapKit कोड जो कुछ घटनाओं बंद आग पर काम कर रहा हूँ जब नक्शा परिवर्तन की सीमाओं (किसी बाहरी सर्वर मूल रूप से कुछ प्रश्नों के)। वहाँ एक किनारे मामले मैं का समाधान नहीं कर पा रहे है। जब उपयोगकर्ता कोई नया पता दर्ज मैं setRegion का उपयोग करने वाले स्थान पर ज़ूम इन करने के लिए और बाद में मैं नक्शे की सीमा की गणना और उन निर्देशांक के साथ मेरे बाहरी सर्वर क्वेरी। मैं हमेशा setRegion लेकिन कहते हैं, वहाँ एक किनारे मामला है जब यह आग नहीं होगा। यही कारण है कि, एक उपयोगकर्ता जादुई ठीक उसी पते कि, नक्शे की वर्तमान केंद्र में निहित है जब कि नक्शा बिल्कुल वैसा ही क्षेत्र के लिए ज़ूम इन करता है का चयन करने के होता है जब। बेशक यह संभावना बहुत कम होता है, लेकिन यह प्राप्त आसान निम्न कोड के साथ है:
CLLocation *centerOfMap = [[CLLocation alloc] initWithLatitude:mapView.centerCoordinate.latitude longitude:mapView.centerCoordinate.longitude];
mySearchLocation.searchLocation = centerOfMap;
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
[self.mapView setRegion:region animated:YES];
यह वर्तमान नक्शे के केंद्र में एक पिन ड्रॉप और उस के आधार पर अपने सर्वर के लिए एक क्वेरी बंद आग उपयोगकर्ता की अनुमति के बराबर होगा। दुर्भाग्य से, क्योंकि कोड तर्क क्षेत्र बदल रहा है (जो मैं इतना है कि उपयोगकर्ताओं को आसानी से नक्शे के आसपास पैन कर सकते हैं और स्पष्ट रूप से एक ताज़ा करें बटन दबाने की जरूरत नहीं किया है) पर निर्भर करता है, मैं चारों ओर एक काम की जरूरत है। मुझे कैसे पता कर सकते हैं जब setRegion बुलाया गया है, लेकिन यह regionWillChange / regionDidChange सक्रिय नहीं होगा। मैं समारोह कुछ कैसे ओवरराइड कर सकते हैं?
संपादित करें: जैसा कि मैंने पहले उत्तर पर टिप्पणी की, मैं पता लगाने के लिए जब इस क्षेत्र निम्नलिखित कोड का उपयोग करके परिवर्तन नहीं होगा करने की कोशिश की:
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;
region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
region = [mapView regionThatFits:region]; //Not sure if this is necessary
NSLog(@diff in latitude of center %f, (mapView.region.center.latitude - region.center.latitude));
NSLog(@diff in longitude of center %f, (mapView.region.center.longitude - region.center.longitude));
NSLog(@diff in latitude span %f, (mapView.region.span.latitudeDelta - region.span.latitudeDelta));
NSLog(@diff in longitude span %f, (mapView.region.span.longitudeDelta - region.span.longitudeDelta));
[self.mapView setRegion:region animated:YES];
दुर्भाग्य से, जब मैं searchLocation सेट वर्तमान मानचित्र मैं निम्नलिखित परिणाम प्राप्त के केंद्र होने के लिए:
diff in latitude of center 0.000000
diff in longitude of center 0.000016
diff in latitude span -0.000000
diff in longitude span 0.000000
विभिन्न मामलों में त्रुटि थोड़ा अलग लेकिन आम तौर पर भाषी क्षेत्र इस setRegion या morever, regionDidChange, आग नहीं है थोड़ा अलग है, तब भी जब है। किसी को भी बताएगा कि ऐसा क्यों कर सकते हैं? या कैसे मैं इस को ठीक से पता लगाने के बारे में जा सकते हैं। नोट: मैं भी mapView.centerCoordinate साथ करने की कोशिश की, लेकिन मैं इसी तरह की त्रुटियों मिलता है, और मैं केवल पता करने के लिए जब इस क्षेत्र में बदलाव नहीं होगा (अगर centerCoordinate ही है ज़ूम स्तर / क्षेत्र अभी भी अलग हो सकता है) चाहते हैं।













