2010-11-06 9 views
10

मेरे पास एनोटेशन का डेटा सेट है जो बहुत तेज़ी से अपडेट हो सकता है। फिलहाल मैं उन्हें मानचित्र पर दोबारा दोहराने से पहले सभी एनोटेशन हटा देता हूं।MKMapView स्वचालित रूप से एनोटेशन को स्थानांतरित करना - उन्हें एनिमेट करें?

NSArray *existingpoints = [mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]]; 
[mapView removeAnnotations:existingpoints]; 

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

- (CLLocationCoordinate2D) coordinate 
{ 
    CLLocationCoordinate2D coord; 
    coord.latitude = [lat doubleValue]; 
    coord.longitude = [lon doubleValue]; 


     double differencetime = exampleTime; 
     double speedmoving; 
     double distanceTravelled = speedmoving * differencetime; 

     CLLocationDistance movedDistance = distanceTravelled; 
     double radiansHeaded = DEG2RAD([self.heading doubleValue]); 
     CLLocation *newLocation = [passedLocation newLoc:movedDistance along:radiansHeaded]; 
     coord = newLocation.coordinate; 

    return coord; 
} 

के रूप में अनुरोध किया है, वस्तु की ज फ़ाइल, मैं एक SetCoordinate विधि आप टिप्पणियों का एक setCoordinate विधि (या समतुल्य) का उपयोग करते हुए समन्वय अद्यतन करते हैं की जरूरत नहीं है ..

#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 
#import <MapKit/MapKit.h> 

@interface TestObject : NSObject <MKAnnotation>{ 
    NSString *adshex; 
    NSString *lat; 
    NSString *lon; 


    NSString *title; 
    NSString *subtitle; 


    CLLocationCoordinate2D coordinate; 
} 
@property(nonatomic,retain)NSString *adshex; 
@property(nonatomic,retain)NSString *lat; 
@property(nonatomic,retain)NSString *lon; 


@property(nonatomic,retain)NSString *title; 
@property(nonatomic,retain)NSString *subtitle; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 


- (CLLocationCoordinate2D) coordinate; 

@end 
+0

क्या आपके पास अपनी एनोटेशन ऑब्जेक्ट या केवल समन्वय विधि में सेट कॉन्ऑर्डिनेट विधि है? अपनी एनोटेशन ऑब्जेक्ट के लिए .h फ़ाइल दिखाएं। – Anna

+0

नहीं, मैंने नहीं किया, संपादित करने के लिए .h को जोड़ा गया –

उत्तर

20

, मानचित्र दृश्य दृश्य पर एनोटेशन की स्थिति स्वचालित रूप से अपडेट हो जाएगा।

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

नक्शा दृश्य केवल एनोटेशन की समन्वय संपत्ति को फिर से पढ़ना होगा यदि यह बताया गया है (समन्वय के माध्यम से) समन्वय बदल गया है। ऐसा करने का एक तरीका एक सेट समन्वयक विधि लागू करना है और कॉल करें जहां कहीं भी आपके पास कोड है जो एनोटेशन के स्थान को अपडेट करता है।

अपने कोड में, आप केवल पढ़ने योग्य समन्वय संपत्ति में समन्वय की गणना कर रहे हैं।

- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate 
{ 
    //do nothing 
} 

और जगह में जहां स्थानों को अपडेट, एनोटेशन पर setCoordinate विधि कॉल:

[someAnnotation setCoordinate:someAnnotation.coordinate]; 
क्या तुम कर सकते हो एनोटेशन मीटर फ़ाइल में जोड़ने (और ज के लिए) है

आप इसे उस स्थान पर कर सकते हैं जहां आप वर्तमान में एनोटेशन को हटा/पुनः जोड़ते हैं।

उपरोक्त कॉल मजाकिया लग रहा है क्योंकि आपके पास समन्वय-गेटर विधि में समन्वय पुनः-कैल्क है। हालांकि इसे त्वरित फिक्स/टेस्ट के रूप में काम करना चाहिए, लेकिन मैं इसे नियमित रूप से उपयोग करने की अनुशंसा नहीं करता हूं।

इसके बजाए, आप एनोटेशन के स्थान को बाहर कैलक कर सकते हैं (जहां आप वर्तमान में एनोटेशन को हटा/पुनः जोड़ते हैं) और सेट समन्वय सेट करने के लिए नया समन्वय पास करते हैं।आपकी एनोटेशन ऑब्जेक्ट वर्तमान में आपके पास मौजूद लैट/एलएनजी इवार्स में अपना नया स्थान संग्रहीत कर सकती है (उन्हें सेट कोऑर्डिनेट में सेट करें और केवल उन लोगों का उपयोग करें जो गेटटर से लौटने के लिए CLLocationCoordinate2D बनाने के लिए उपयोग करें) या (बेहतर) समन्वय ivar स्वयं का उपयोग करें (इसे सेट करें सेट करें और गेटटर में इसे वापस करें)।

+0

"महत्वपूर्ण" नोट का लिंक बदल गया है: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps .html # // apple_ref/doc/uid/TP40009497-CH6-SW2 – Anna

+0

दुर्भाग्य से यह संक्रमण को एनिमेट नहीं करता है। किसी को एनिमेटेड एनोटेशन को स्थानांतरित करने के किसी भी तरीके से पता है? – devios1

+2

पता चला कि कैसे। Http://stackoverflow.com/a/8564097/238948 देखें – devios1

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