Forgalomba nyila uipopovercontroller a kommentár pont mapkit

szavazat
2

Én próbálok egy popover jelent meg egy térképet kit hivatkozási pontnál, de nem találja a „len” a kommentár tulajdonságainak megtekintése használni a len eljárás hívás uipopovercontroller. Ha adott egy kommentárt a térképen kit hogyan lehet megtalálni a megfelelő „keret”?

Annak érdekében, hogy paul több információt, itt van a kísérlet: már használják:

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

És ... kapok egy popover a bal felső szélén a mapview.

Tud valaki mondani, hogy miért? Én próbálok, hogy megjelenjen a következő pin / annotationview.

A kérdést 04/05/2010 07:36
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
7

Oké,

Itt van, amit találtam, mint az egyetlen Kerülő eddig:

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

A rossz az egészben az, hogy én szimulál amivel azt a nézetet, amely a kommentár. Én egyszerűen kap a annotation.coordinate A kommentár nézet (MKMapKit stílus koordináták), és átalakítani a koordinátákat a képernyő koordinátákra. Aztán létre uilabel (hogy a keret képes konstrukció a képernyőn) elhelyezni, ahol a Jegyzet nézet lenne. Aztán elmondja a popovercontroller jelenjen meg, hogy a keret helyét.

Itt látható a kicker. Nem adjuk hozzá a uilabel a mapView2. Egyszerűen engedje el egyszer popovercontroller állított magának.

Hack, de tiszta.

Válaszolt 04/05/2010 22:13
a forrás felhasználó

szavazat
2

A probléma az első példa ez a téma a hívás presentPopoverFromRect: inView: permittedArrowDirections: animációs :. Az értéket a inView: paraméter nem megfelelő. Meg kell view.rightCalloutAccessoryView.

Vagyis a téglalap koordinátáit Bizonyítsa be, hogy rightCalloutAccessoryView.

Ezzel a módosítással a viselkedés hasonló lesz a Térképek alkalmazást, amely úgy tűnik jobb.

Válaszolt 26/06/2010 15:40
a forrás felhasználó

szavazat
1

Nem olvastam az összes választ ... de volt egy hasonló probléma. Meg akartam mutatni a popover dobozt, amikor megérintem a tartozék gombra a kiemelő buborék. Ez hogyan megoldotta a problémát.

Először is, azt a térkép közepén, a kommentár én választottam, ami szerintem mindig jó ötlet ebben az esetben. Aztán végre a popover fix méretű és helyezze a megfelelő pozícióba (véleményem szerint).

Itt van egy része a kód:

-(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];
}
Válaszolt 09/05/2010 21:57
a forrás felhasználó

szavazat
1

Ha az MKAnnotationView, és azt jelenti, hogy te, akkor használd a frametulajdonság, mivel ez egy UIViewalosztálya.

Válaszolt 04/05/2010 08:27
a forrás felhasználó

szavazat
0

A kérdés az presentPopoverFromRect: inView: permittedArrowDirections: animációs, hogy ha a tartalom mérete popover nagyobb, mint ami elfér a képernyőn (mert a kommentár közel a szélén a képernyőn, például), a rendszer az első (a legalábbis részben) figyelmen kívül hagyja a téglalap, és tegye a hegyét a nyíl valahol a közepén a nézetet. Már megoldotta ezt csinálja ezt az utat:

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

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

A rightCalloutAccessoryView általában egy részlet közzététele gombot, amelynek mérete 29 által 31. Szóval, mit tegyek, hogy hozzon létre egy 29 31 téglalap, amely lefedi a teljes tartozék kilátás. Aztán bemutatni popover a tartozék kilátás. Növelésével 29-40, a popover nyíl kívül lesz kiemelő buborék, de csak akkor, ha van elég hely, hogy bemutassa a teljes kiemelő a képernyőn. Ha nem, akkor a fehér nyíl mozgatni a buborék belsejében. Fenntartani egy egységes felületet, elhagytam a szélesség 29.

Válaszolt 06/06/2012 06:57
a forrás felhasználó

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