Umístěním šipku uipopovercontroller na anotace bodu mapkit

hlasů
2

Snažím se dostat popover se zobrazí na mapě kit anotace bodu, ale nemůže najít „rect“ ve vlastnostech anotace pohledu používat metodu rect volání uipopovercontroller. Jestliže vzhledem k anotaci na mapě soupravy jak se dá najít odpovídající „rámec“?

Chcete-li dát Paulovi další informace, zde je můj pokus: Již jsem použít:

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

A ... Mám popover v levém horním rohu na okraji MapView.

Může mi někdo říct, proč? Snažím se dostat do objevit v blízkosti pin / annotationview.

Položena 04/05/2010 v 07:36
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
7

Dobře,

Zde je to, co jsem našel jako jediná práce kolem tak daleko:

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];

Špatnou na tom je, že jsem se předstírat jeho uvedení v pohledu anotace. Prostě jsem ten annotation.coordinate z pohledu poznámky (MKMapKit styl koordinuje) a převést souřadnice na obrazovku souřadnic. Pak jsem vytvořit uilabel (získat konstrukci rámu, který je schopen na obrazovce), které kdy Anotace View by. pak řeknu popovercontroller se objeví na tomto místě rámu.

Zde je kicker. I nepřidávejte uilabel do mapView2. Prostě jsem se uvolnila po popovercontroller vypracoval sám.

Hack, ale čisté.

Odpovězeno 04/05/2010 v 22:13
zdroj uživatelem

hlasů
2

Problém s prvním příkladem v tomto tématu je ve výzvě k presentPopoverFromRect: InView: permittedArrowDirections: animovaný :. Hodnota za InView: Parametr není správný. Mělo by být view.rightCalloutAccessoryView.

To znamená, že poloha obdélníku jsou vzhledem k rightCalloutAccessoryView.

Díky této změně bude chování je podobný aplikaci Mapy, které se zdá být v pořádku.

Odpovězeno 26/06/2010 v 15:40
zdroj uživatelem

hlasů
1

Nečetl všechny odpovědi ... ale měl jsem podobný problém. Chtěl jsem ukázat popover okno, když jsem klepněte na tlačítko příslušenství v popisku bubliny. To je, jak jsem vyřešil můj problém.

Za prvé, já střed mapy na anotaci jsem si vybrala, což myslím, že je vždy dobré v tomto případě. Pak jsem se realizovat popover s pevnou velikostí a umístěte ho ve správné poloze (podle mého názoru).

Zde je část mého kódu:

-(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];
}
Odpovězeno 09/05/2010 v 21:57
zdroj uživatelem

hlasů
1

Pokud máte MKAnnotationView, a ty naznačují, že ano, pak můžete použít svůj framemajetek, protože se jedná o UIViewpodtřídy.

Odpovězeno 04/05/2010 v 08:27
zdroj uživatelem

hlasů
0

Problém s presentPopoverFromRect: InView: permittedArrowDirections: animovaný, je, že v případě, že velikost obsah popover je větší než to, co se hodí na obrazovce (protože anotace je uzavřete okraj obrazovky, například), systém bude první (v alespoň částečně) nepřihlížet obdélník, a umístit hrot šipky někde uprostřed pohledu. Jsem vyřešil tím, že dělá to takhle:

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

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

RightCalloutAccessoryView je obvykle tlačítko detail zveřejnění, který má velikost 29 od 31. Tak, co mám dělat, je vytvořit 29 do 31 obdélník, který pokrývá celý pohled příslušenství. Pak jsem si představit popover z pohledu příslušenství. Zvýšením 29 až 40 ° C, bude šipka popover být mimo popisku bubliny, ale pouze v případě, že je dostatek prostoru pro prezentaci celého popisek na obrazovce. Pokud tomu tak není, bude šipka pohybovat uvnitř bubliny. Chcete-li zachovat konzistentní rozhraní, nechal jsem šířku na 29.

Odpovězeno 06/06/2012 v 06:57
zdroj uživatelem

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