2012-07-11 49 views
8

मैपव्यू पर चलने वाली कार को अनुकरण करने के लिए AnnotationView परत पर CABasicAnimation जोड़ता हूं।एनिमेटेड एनोटेशन व्यू मैपव्यू ज़ूम करते समय गायब हो जाता है?

यह तब तक ठीक काम करता है जब तक कि एनीमेशन प्रगति पर न हो, मैपव्यू ज़ूम इन या ज़ूम करने का प्रयास करता हूं।

मुझे नक्शादृश्य ज़ूम करते समय एनिमेटिंग एनोटेशन दृश्य गायब हो गया !!

मुझे लगता है कि यह नक्शादृश्य ज़ूम करते समय एनीमेशन ऑब्जेक्ट से जुड़े परत को हटा दिया गया है।

मैं ज़ूमिंग करते समय एनीमेशन को रोककर इसे हल करने का प्रयास करता हूं। लेकिन परिणाम अच्छा नहीं है। कार लक्ष्य बिंदु पर कूद लगता है।

किसी के पास इसके बारे में कोई विचार है?

कोई भी जानता है कि मानचित्रदृश्य ज़ूम करते समय एनीमेशन अभी भी कैसे चल रहा है?

+0

आप इस समस्या पर कोई प्रगति की? मुझे एक ही समस्या का सामना करना पड़ रहा है और इसे हल करना चाहते हैं। –

+0

@ हबर्ट क्या आप अपना एनोटेशन चलने का कोड पोस्ट कर सकते हैं? – Mubbashar

उत्तर

1

मुझे नहीं पता कि आपकी समस्या को प्रोग्रामेटिक तरीके से कैसे हल किया जाए, लेकिन यदि ज़ूम पूर्ण हो जाए, तो ज़ूम पूर्ण होने पर, वर्तमान स्थिति और नई के बीच की दूरी की गणना करने पर कार की स्थिति को स्टोर करें (बिंदु को सही करें) स्थिति (बिंदु बी) और उसके बाद बिंदु से बिंदु बी को एनिमेट करें। इस तरह कार दूसरी लक्ष्य बिंदु पर "कूद" करने के लिए सीम नहीं होगी। इसे थोड़ा फैनसीयर बनाने के लिए, कार की गति को सामान्य गति से दो बार शुरू करें और फिर "बी" बिंदु के करीब पहुंचने पर सामान्य गति में कमी करें। मुझे लगता है कि यह एक बग की तरह कम दिखाई देगा और एक प्रभाव की तरह।

+0

अच्छे विचार, लेकिन मुझे वास्तव में काम कोड के साथ एक जवाब की जरूरत है। मुझे यह भी पता नहीं है कि उपयोगकर्ता कैसे MKMapView में ज़ूम कर रहा है। – Felix

0

मुझे लगता है, आप mapView:regionDidChangeAnimated: प्रतिनिधि विधि का उपयोग कर सकते हैं। जब भी उपयोगकर्ता स्क्रॉल/ज़ूम करता है, तो इस विधि को बुलाया जाएगा। बस एक बार कोशिश करें। यह आपकी मदद कर सकता है।

1

मैं इसे regionWillChangeAnimated पर सभी एनोटेशन एनिमेशन समाप्त करके हल: -

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated 
{ 

    for (int i=0;i< [mapView.annotations count];i++) 
    { 
    id annotation = [mapView.annotations objectAtIndex:i]; 

    MKAnnotationView* annView =[mapView viewForAnnotation: annotation]; 
    if (annView != nil) 
    { 

     CALayer* layer = annView.layer; 
     [layer removeAllAnimations]; 
    } 

    } 
}