जैसा कि बताया गया है, mapViewDidFinishLoadingMap
कभी-कभी बिल्कुल नहीं कहा जाता है, खासकर यदि नक्शा टाइल्स पहले से ही कैश किए जाते हैं, और कभी-कभी इसे कई बार कहा जाता है।
मुझे पता है कि अंतिम कॉल पर इसे कई बार कहा जाता है जब सभी टाइल्स प्रदान किए जाते हैं। इसलिए मुझे लगता है कि यदि आप मानचित्र शुरू होने के बाद 2 सेकंड टाइमर सेट करते हैं तो आप इसे काम पर ला सकते हैं। इंटरैक्शन अक्षम करें ताकि नक्शा बदलना जारी न रहे, और टाइमर बंद होने पर उपयोगकर्ता इंटरैक्शन सक्षम कर सके।
यदि mapViewDidFinishLoadingMap
को भविष्य में 2 सेकंड के लिए फिर से टाइमर रीसेट करने के लिए कहा जाता है। जब टाइमर अंततः बंद हो जाता है, तो आपके पास पूरी तरह से प्रस्तुत नक्शा होना चाहिए।
आप अन्य कॉलबैक जैसे mapViewDidFailLoadingMap
पर विचार करना चाहेंगे। इसके अलावा शोर कनेक्शन पर इसका परीक्षण करें, क्योंकि टाइल्स लाने के लिए काफी समय लगता है, तो 2 सेकंड लंबे समय तक पर्याप्त नहीं हो सकते हैं।
- (void)restartTimer
{
[self.finishLoadingTimer invalidate];
self.finishLoadingTimer = [NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(mapLoadingIsFinished)
userInfo:nil
repeats:NO];
}
- (void)mapLoadingIsFinished
{
self.finishLoadingTimer = nil;
self.mapChanging = NO;
self.view.userInteractionEnabled = YES;
}
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
if (self.mapChanging) {
[self restartTimer];
}
}
- (void)startLookingForMapChange
{
assert(self.mapChanging == NO);
if (self.mapChanging == NO) {
self.mapChanging = YES;
assert(self.finishLoadingTimer == nil);
self.view.userInteractionEnabled = NO;
[self restartTimer];
}
}
मैं दायर की है एप्पल बग # 13,774,496 इस से संबंधित है और दिखाने के लिए समस्या अभी भी iOS6 पर मौजूद है एक उदाहरण एप्लिकेशन बनाया: https://github.com/iwasrobbed/MapKitDelegateBug – iwasrobbed