Τοποθετώντας το βέλος του uipopovercontroller στο σημείο σχολιασμό για mapkit

ψήφοι
2

Είμαι προσπαθεί να πάρει ένα popover να εμφανιστεί σε ένα σημείο σχολιασμό κιτ χάρτη, αλλά δεν μπορεί να βρει μια «rect» στις ιδιότητες ενόψει σχολιασμό για να χρησιμοποιήσετε τη μέθοδο rect καλώντας uipopovercontroller. Αν δοθεί ένα σχολιασμό στο κιτ χάρτη πώς μπορεί κανείς να βρει το κατάλληλο «πλαίσιο»;

Για να δώσει paul περισσότερες πληροφορίες, εδώ είναι η προσπάθειά μου: έχω ήδη χρησιμοποιηθεί:

- (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;
    }
}

Και ... να πάρω ένα popover στο άνω αριστερό στην άκρη του MapView.

Μπορεί κάποιος να μου πει γιατί; Είμαι προσπαθεί να το πάρει για να εμφανιστεί κοντά στο pin / 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];

Το κακό μέρος για αυτό είναι ότι είμαι επινοώντας τη θέση της στη θέα του σχολιασμού. Εγώ απλά να πάρει το annotation.coordinate της άποψης σχολιασμού (συντεταγμένες MKMapKit στυλ) και τη μετατροπή των συντεταγμένων στην οθόνη συντεταγμένες. Τότε μπορώ να δημιουργήσω ένα uilabel (για να πάρετε μια κατασκευή πλαισίου δυνατότητα στην οθόνη) τοποθετούνται σε μέρη όπου η σχολιασμού View θα είναι. Στη συνέχεια πείτε το popovercontroller να εμφανίζεται σε αυτή τη θέση του πλαισίου.

Εδώ είναι το kicker. Δεν προσθέτουμε το uilabel στο mapView2. Απλά αφήστε το για άλλη μια popovercontroller έχει καταρτίσει η ίδια.

Hack, αλλά καθαρό.

Απαντήθηκε 04/05/2010 στις 22:13
πηγή χρήστη

ψήφοι
2

Το πρόβλημα με το πρώτο παράδειγμα σε αυτό το νήμα είναι στην πρόσκληση για την presentPopoverFromRect: Inview: permittedArrowDirections: κινούμενα :. Η τιμή για την Inview: παράμετρος δεν είναι σωστή. Θα πρέπει να είναι view.rightCalloutAccessoryView.

Δηλαδή, οι συντεταγμένες του ορθογωνίου είναι σε σχέση με rightCalloutAccessoryView.

Με την αλλαγή αυτή, η συμπεριφορά θα είναι παρόμοια με την εφαρμογή χαρτών που φαίνεται δεξιά.

Απαντήθηκε 26/06/2010 στις 15:40
πηγή χρήστη

ψήφοι
1

Δεν είχα διαβάσει όλες τις απαντήσεις ... αλλά είχα ένα παρόμοιο πρόβλημα. Ήθελα να δείξω ένα κουτί popover όταν πατήσετε το κουμπί εξάρτημα στη φούσκα επεξήγηση. Αυτό είναι το πώς θα λυθεί το πρόβλημά μου.

Πρώτα από, θα κεντράρετε το χάρτη με το σχολιασμό επέλεξα, το οποίο νομίζω ότι είναι πάντα μια καλή ιδέα σε αυτή την περίπτωση. Τότε θα εφαρμόσει το popover με ένα σταθερό μέγεθος και τοποθετήστε το στη σωστή θέση (κατά τη γνώμη μου).

Εδώ είναι ένα μέρος του κωδικού μου:

-(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

Το θέμα με presentPopoverFromRect: Inview: permittedArrowDirections: κινουμένων σχεδίων είναι ότι αν το μέγεθος του περιεχομένου του popover είναι μεγαλύτερη από ό, τι ταιριάζει στην οθόνη (επειδή ο σχολιασμός είναι κοντά η η άκρη της οθόνης, για παράδειγμα), το σύστημα θα είναι το πρώτο (σε τουλάχιστον εν μέρει) να αγνοήσει το ορθογώνιο και βάλτε την άκρη του βέλους κάπου στη μέση της προβολής. Έχω λυθεί αυτό με τον τρόπο αυτό τον τρόπο:

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

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

Η rightCalloutAccessoryView είναι συνήθως ένα κουμπί λεπτομέρεια αποκάλυψη, η οποία έχει μέγεθος 29 με 31. Έτσι, αυτό που κάνω, είναι να δημιουργήσει ένα 29 με 31 ορθογώνιο, το οποίο καλύπτει ολόκληρη την άποψη αξεσουάρ. Τότε θα παρουσιάσει το popover από την άποψη αξεσουάρ. Με την αύξηση του 29 με 40, η popover βέλος θα είναι έξω από την φούσκα επεξήγηση, αλλά μόνο αν υπάρχει αρκετός χώρος για να παρουσιάσει το σύνολο της επεξήγησης στην οθόνη. Αν όχι, το βέλος θα μετακινηθεί στο εσωτερικό της φυσαλίδας. Για να διατηρηθεί ένα σταθερό περιβάλλον, έφυγα από το πλάτος στο 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