2012-12-05 12 views
5

शुभ दिन सबको!मुख्य धागे के बाहर MKMapView प्रस्तुत करने के लिए कैसे?

मैं आईफोन के लिए आवेदन विकसित कर रहा हूं। मेरे पास तालिका दृश्य और उन स्थानों की सूची है जिन्हें मुझे उपयोगकर्ता को प्रदर्शित करने की आवश्यकता है। इस उद्देश्य के लिए मैंने प्रत्येक तालिका दृश्य कक्ष में MKMapView का उपयोग किया। लेकिन जब बहुत सारे स्थान होते हैं तो यह समाधान बहुत धीमा हो जाता है। मैं यूआई प्रदर्शन में सुधार करना चाहता हूं और UIImageView के साथ MKMapView को प्रतिस्थापित करना चाहता हूं। तो मुझे कुछ गैर-मुख्य थ्रेड में MKMapView से UIImage तक मानचित्र प्रस्तुत करने की आवश्यकता है। मैंने इसे ऐसा करने की कोशिश की:

UIGraphicsBeginImageContext(CGSizeMake(64, 64)); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[[mapView layer] renderInContext:context]; 
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

लेकिन यह कोड मानचित्र की केवल पीले रंग की पृष्ठभूमि प्रस्तुत करता है और निर्दिष्ट स्थान से ऊपर पिन करता है। कोई नक्शा डेटा नहीं है ऐसी सड़कों, घरों, आदि। मैंने क्या गलत किया? आपकी सलाह के लिए धन्यवाद।

उत्तर

3

कारण यह है कि आपको कोई नक्शा डेटा नहीं मिल रहा है कि आप मानचित्र डेटा लोड करने की प्रतीक्षा नहीं कर रहे हैं। प्रतीक्षा करें जब तक नक्शा दृश्य mapViewDidFinishLoadingMap: प्रतिनिधि विधि को बुलाया जाता है, फिर तस्वीर लें। प्रतिनिधि विधि के बाद आपको एक या दो सेकंड के बाद तस्वीर लेनी पड़ सकती है, जैसा कि मैंने पाया है कि कभी-कभी प्रतिनिधि विधि को थोड़ा जल्दी कहा जाता है जैसा कि मैंने this question में उल्लेख किया है।

- (void)mapViewDidFinishLoadingMap:(MKMapView*)mapView { 
    double delayInSeconds = 2.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     UIGraphicsBeginImageContext(CGSizeMake(64, 64)); 
     CGContextRef context = UIGraphicsGetCurrentContext(); 
     [mapView.layer renderInContext:context]; 
     thumbnail_image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    }); 
} 

ध्यान दें: आप तो यह है कि जब आप इसे एक वर्ग छवि यह awkwardly बढ़ाया नहीं जाएगा में प्रस्तुत करना आपके मानचित्र दृश्य वर्ग के आयाम बनाने के लिए चाहता हूँ।

+0

समस्या यह है कि इस प्रतिनिधि विधि को कभी नहीं बुलाया जाता है। मुझे नहीं पता कि लोड नक्शा को कैसे मजबूर किया जाए। सच्चाई बताने के लिए मैं मोनोटच का उपयोग करता हूं और शायद यह इस मंच की बग है। –

+0

मैंने एक प्रयोग किया है। निर्दिष्ट प्रतिनिधि विधि को केवल तभी सही कहा जाता है जब MSMapView को AddSubview() का उपयोग करके पर्यवेक्षण में जोड़ा जाता है। –

+0

सही। नक्शा दृश्य छवि/मानचित्र टाइल्स लोड करने का प्रयास नहीं करेगा जब तक यह वास्तव में दृश्य पदानुक्रम का हिस्सा न हो। –

संबंधित मुद्दे