MapKit पर एनोटेशन बिंदु पर uipopovercontroller के तीर रखने

वोट
2

मैं एक पॉपओवर मानचित्र किट एनोटेशन बिंदु पर प्रकट करने के लिए प्राप्त करने के लिए कोशिश कर रहा हूँ लेकिन uipopovercontroller बुलाने की रेक्ट विधि का उपयोग करने के लिए एक रेक्ट एनोटेशन दृश्य गुण में नहीं मिल सकता है। अगर नक्शा किट पर टिप्पणी के कैसे एक मिल रहा है उचित फ्रेम दिया?

पॉल अधिक जानकारी देने के लिए, यहाँ मेरी प्रयास है: मैं पहले से ही इस्तेमाल किया है:

- (void)mapView:(MKMapView *)mapView2 annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
    NSLog(@annotationView...);
    MyGizmoClass *myGizmoClass= [MyGizmoClass sharedManager];
    int choice = 0;
    for (NSMutableDictionary *locationDictionary in [myGizmoClass searchResultsForResortLocation]) 
    {
        if([view.annotation.title isEqualToString:[locationDictionary objectForKey:@name]])
        {

            DetailViewTableStyleController *controller = [[DetailViewTableStyleController alloc] initWithlocationData:[[myGizmoClass searchResultsForResortLocation] objectAtIndex:choice] nibName:@DetailViewTableStyle bundle:[NSBundle mainBundle]];

            controller.categoryCode = [locationDictionary objectForKey:@category_code] ;

            //create a popover controller
            popoverControllerDetail = [[UIPopoverController alloc] initWithContentViewController:controller];

            // set contentsize
            [popoverControllerDetail setPopoverContentSize:CGSizeMake(320,480)];

            //present the popover view non-modal

            [popoverControllerDetail presentPopoverFromRect:view.rightCalloutAccessoryView.frame inView:mapView2 permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

            [controller release];
            break;
        }
        choice = choice + 1;
    }
}

और ... मैं MapView के किनारे पर ऊपर बाईं ओर एक पॉपओवर मिलता है।

क्या कोई मुझे बता सकता है क्यों? मैं यह पिन / annotationview के पास प्रकट करने के लिए प्राप्त करने की कोशिश कर रहा हूँ।

04/05/2010 को 07:36
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
7

ठीक है,

यहाँ मैं सिर्फ काम के आसपास अब तक के रूप में पाया है:

CGPoint annotationPoint = [mapView2 convertCoordinate:view.annotation.coordinate toPointToView:mapView2];
float boxDY=annotationPoint.y;
float boxDX=annotationPoint.x;
CGRect box = CGRectMake(boxDX,boxDY,5,5);
UILabel *displayLabel = [[UILabel alloc] initWithFrame:box];


[popoverControllerDetail presentPopoverFromRect:displayLabel.frame inView:mapView2 permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[displayLabel release];

इस बारे में बुरा हिस्सा है कि मैं एनोटेशन के मद्देनजर में डालने faking कर रहा हूँ। मैं बस एनोटेशन देखने के annotation.coordinate मिल (MKMapKit शैली का समन्वय करता है) और निर्देशांक स्क्रीन करने के लिए निर्देशांक परिवर्तित। तब मैं एक UILabel (स्क्रीन पर एक फ्रेम-सक्षम निर्माण पाने के लिए) रखा जहां एनोटेशन देखें होगा पैदा करते हैं। मैं तो उस फ्रेम स्थान पर प्रकट करने के लिए popovercontroller बताओ।

यहाँ किकर है। मैं mapView2 को UILabel न जोड़ें। मैं बस इसे जारी एक बार popovercontroller ही आकर्षित किया है।

हैक, लेकिन साफ।

04/05/2010 को 22:13
का स्रोत उपयोगकर्ता

वोट
2

ध्यान में रखते हुए: permittedArrowDirections: इस सूत्र में पहला उदाहरण के साथ समस्या यह presentPopoverFromRect को कॉल में शामिल है एनिमेटेड :. के लिए ध्यान में रखते हुए मूल्य: पैरामीटर सही नहीं है। यह view.rightCalloutAccessoryView होना चाहिए।

यही कारण है, आयत के निर्देशांक rightCalloutAccessoryView के सापेक्ष हैं।

इस बदलाव के साथ, व्यवहार जो सही लगता है नक्शे आवेदन के समान हो जाएगा।

26/06/2010 को 15:40
का स्रोत उपयोगकर्ता

वोट
1

सभी उत्तर पढ़ नहीं था ... लेकिन मैं एक ऐसी ही समस्या थी। मैं एक पॉपओवर बॉक्स दिखाने के लिए जब मैं कॉल आउट बुलबुले में गौण बटन को टैप करना चाहता था। यह मैं कैसे मेरी समस्या हल है।

पहले की है, मैं एनोटेशन मैं चुना है, जो मुझे लगता है कि हमेशा इस मामले में एक अच्छा विचार है करने के लिए नक्शे को केंद्रित। तब मैं एक निश्चित आकार के साथ पॉपओवर को लागू करने और सही स्थिति (मेरी राय में) पर यह स्थिति।

यहाँ मेरी कोड का एक हिस्सा है:

-(void)mapView:(MKMapView *)theMapView annotationView:(MKAnnotationView *)pin calloutAccessoryControlTapped:(UIControl *)control
{   
    UIViewController *detailController = [[detailedPinView alloc] initWithNibName:@"detailedPinView" 
                                                                           bundle:nil 
                                                                   annotationView:pin];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {

        UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:detailController];
        [aPopover setDelegate:self];
        [aPopover setPopoverContentSize:CGSizeMake(320, 320) animated:YES];

        [detailController setPopover:aPopover];
        [detailController release];

        [mapView deselectAnnotation:pin.annotation animated:YES];

        self.popoverController = aPopover;

        [mapView setCenterCoordinate:pin.annotation.coordinate animated:YES];

        [self.popoverController presentPopoverFromRect:CGRectMake(382,498,0,0) inView:self.view  permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
    }
    else
    {
        [self presentModalViewController: detailController animated:YES];
    }


    [detailController release];
}
09/05/2010 को 21:57
का स्रोत उपयोगकर्ता

वोट
1

अगर आपके पास MKAnnotationViewहै, और आप मतलब है कि आप ऐसा करेंगे, तो आप अपने उपयोग कर सकते हैं frame, संपत्ति के रूप में यह एक है UIViewउपवर्ग।

04/05/2010 को 08:27
का स्रोत उपयोगकर्ता

वोट
0

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

self.popover = [[UIPopoverController alloc] initWithContentViewController:placeDetailViewController];

[self.popover presentPopoverFromRect:CGRectMake(0, 0, 29, 31) inView:view.rightCalloutAccessoryView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

rightCalloutAccessoryView सामान्य रूप से एक विस्तार प्रकटीकरण बटन है, जो 31 से 29 के आकार की है तो, मैं क्या करते हैं, एक 29 31 से आयत है, जो पूरे गौण दृश्य को शामिल करती है। तब मैं गौण देखने से पॉपओवर प्रस्तुत करते हैं। 40 के लिए 29 को बढ़ाने से पॉपओवर तीर कॉलआउट बुलबुला बाहर है, लेकिन केवल वहाँ स्क्रीन पर पूरे कॉल आउट पेश करने के लिए पर्याप्त जगह है अगर हो जाएगा। यदि नहीं, तो तीर बुलबुला अंदर ले जाया जाएगा। एक सुसंगत इंटरफेस को बनाए रखने के लिए, मैं 29 में चौड़ाई छोड़ दिया है।

06/06/2012 को 06:57
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more