mapkit üzerinde açıklama noktasında uipopovercontroller ait oka Yerleştirme

oy
2

Bir harita kiti açıklama noktasında görünmesi için bir popover almaya çalışıyorum ama uipopovercontroller çağıran rect yöntemi kullanmak açıklama görünüm özelliklerinde bir rect bulamıyorum. biri uygun çerçeve buluyor Haritanın nasıl kiti ek açıklama verilirse?

Paul ise bilgi vermek için, burada benim girişimi: Zaten kullandı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;
    }
}

Ve ... MapView kenarında sol üst bir popover olsun.

neden kimse bana söyleyebilir misiniz? Ben pim / annotationview yakın görünmesi için çalışıyorum.

Oluştur 04/05/2010 saat 07:36
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
7

Tamam,

Burada sadece çalışmak-etrafında şimdiye kadar olduğu gibi bulduklarım:

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

Bu konuda kötü bölüm I ek açıklama bakışta koyarak numara ediyorum olmasıdır. Ben sadece açıklama bakış annotation.coordinate olsun (MKMapKit tarzı koordinatları) ve koordinatlarını ekran koordinatları dönüştürmek. Sonra Ek Açıklama Görünüm nerede olacağını (ekranda bir çerçeve özellikli yapısını almak için) yerleştirilen bir UILabel oluşturun. Sonra o çerçeve yerde görünmesini popovercontroller söyle.

İşte vurucu olduğunu. Ben mapView2 için UILabel eklemeyin. popovercontroller kendisini çizilmiş sonra ben sadece bırakın.

Hack, ama temiz.

Cevap 04/05/2010 saat 22:13
kaynak kullanıcı

oy
2

InView: permittedArrowDirections: Bu konuya ilk örnekle sorun presentPopoverFromRect çağrısında olduğunu animasyonlu :. Inview değeri: parametresi doğru değildir. Bu view.rightCalloutAccessoryView olmalıdır.

Bu dikdörtgenin koordinatları rightCalloutAccessoryView göre, bir.

Bu değişiklikle, davranış doğru görünüyor haritalar uygulamasına benzer olacaktır.

Cevap 26/06/2010 saat 15:40
kaynak kullanıcı

oy
1

Tüm yanıtları okumak ... ama benzer bir sorun vardı vermedi. Ben çizgisi balonunda aksesuar düğmesine dokunun zaman popover kutusunu göstermek istedik. Bu benim sorun çözüldü nasıl.

Öncelikle, ben hep bu durumda iyi bir fikir olduğunu düşünüyorum ben seçtim açıklama, haritayı ortalamak. Sonra sabit boyutlu popover uygulamak ve (Bence) doğru pozisyonda konumlandırmak.

İşte benim kod parçasıdır:

-(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];
}
Cevap 09/05/2010 saat 21:57
kaynak kullanıcı

oy
1

Eğer varsa MKAnnotationViewve siz bunu ima, o zaman onun kullanabilirsiniz framebir olduğu gibi, mülkiyet UIViewalt sınıf.

Cevap 04/05/2010 saat 08:27
kaynak kullanıcı

oy
0

InView: permittedArrowDirections: presentPopoverFromRect ile sorun animasyonlu olduğunu popover içeriğinin boyutu (ek açıklama ekranın kenarı yakın olduğu için, örneğin) ekranda sığacak kadar büyükse, sistem (ilk olacak en azından kısmen) dikdörtgen göz ardı ve bakış ortasında bir yerde ok ucu koydu. Ben öyle yaparak bu çözdük:

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

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

rightCalloutAccessoryView Yani, ne, tüm aksesuar görünümü kapsayan 29 31 tarafından dikdörtgen oluşturmak normalde 31. tarafından 29 büyüklüğe sahip bir ayrıntı açıklama düğmesidir. Sonra aksesuar görünümünden popover sunuyoruz. 40 29 artırarak, popover ok çizgisi balonun dışında, ama sadece ekranda Belirtmenin tümünü sunmak için yeterli alan varsa olacak. Değilse, ok kabarcığın içinde taşınacak. tutarlı bir arayüz sağlamak için, bir 29 ° C sıcaklıkta genişlik bıraktı.

Cevap 06/06/2012 saat 06:57
kaynak kullanıcı

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