2012-07-05 8 views
18

Amacım, sadece değişen ok ofsetiyle bir UIPopoverController için aynı koordinatları tutmaktır. Yani temelde her birinin bir düğmeyi gösteren üç düğmesinin var. Bu popolu sunarken ekranda pozisyon değiştirir, ama bunu istemiyorum. screenoshots daha net bir görünüm olmak için: Apple'ın dahili içinde UIPopoverViewController sınıfı ile olduğu gibiUIPopoverController'ı sadece ok ofseti değiştirerek aynı konumda hazırlayın

enter image description here

enter image description here

enter image description here

+1

+1, bu ilginç bir soru. –

cevap

15

I (varsayılan) sol üst yerine üst merkezinin olmak için oku istedik.

UIPopoverController ürününün popoverLayoutMargins özelliğini ayarlayarak aşağıdaki sonucu (ekran görüntüsü) almayı başardım. Populasyonun nerede gösterileceğini belirlemek için UIPopoverController'ın dahili hesaplamalarında kullanılan ekran alanını azaltmak için kullanabilirsiniz.

UIPopovercontroller arrow on the left

kodu:

// Get the location and size of the control (button that says "Drinks") 
CGRect rect = control.frame; 

// Set the width to 1, this will put the anchorpoint on the left side 
// of the control 
rect.size.width = 1; 

// Reduce the available screen for the popover by creating a left margin 
// The popover controller will assume that left side of the screen starts 
// at rect.origin.x 
popoverC.popoverLayoutMargins = UIEdgeInsetsMake(0, rect.origin.x, 0, 0); 

// Simply present the popover (force arrow direction up) 
[popoverC presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

Ben yukarıdaki değişiklikler yaparak istenilen sonucu elde etmek mümkün olacak düşünüyorum.

+0

popoverLayoutMargins ayarı harika çalışıyor. Teşekkürler. – Bastek

+0

Bir tedavi çalışması, teşekkürler. – rosshump

+0

Ok ucunu tam olarak kaynak görünümü içindeki bir noktaya yerleştirmenin bir yolu var mı? Tüm ekranı kaynak görünümü olarak kullanıyorum, böylece cihaz yönelimi değiştiğinde 1x1 birim boyutunda olan kaynak rect'i değiştiriyorum. Sorun şu ki, okun olması gereken yerde sağda hafif. – rraallvv

1

Sen bunu yapamaz. Ancak, kendi popover view kontrol cihazınızı (sadece bazı çok basit 2D geometri ve UIView'nin dokümanlarında biraz kazma) uygulamak oldukça basit ve mantıklı olmalıdır.

+1

Apple'ın popoverleri ile yapılabilir. Tablo görünümü satırlarındaki pop'ları izlerseniz, ok, tablo kaydırılırken satırı takip edebilir. Dolayısıyla, ok bir görünümde bir doğrultuya bağlanmışsa, bu görünümü taşıyabilir ve ok takip eder. – Gabriel

+0

Ancak içerik rect orijinal konumunda mı kalacak? Ortalaştırılmak için oku takip etmeyecek mi? –

+0

Hayır. Uygulamamdaki popover büyük, tüm alan en alt seviyeye kadar. Ok, bölünmüş bir görünümün ana görünümünde tablo görünümünün bir satırını işaret ediyor. Sonunda yeni bir satır göründüğünde ve tablo görünümü kaydırıldığında, areow satırı takip eder. – Gabriel

1

Evet, bunu yapabilirsiniz. Alfa = 0.0f ile bir aux görünümü oluşturmalı ve oku yönlendirmek için kullanmalısınız. Örneğin

:

auxView = [[UIView alloc] initWithFrame:firstButton.frame]; 
auxView.alpha = 0.0 ; 
auxView.userInteractionEnabled = NO; 
[firstButton.superView addSubview:auxView]; 
[auxView release]; 

Tamam, okunun kılavuz olarak bu görüşü kullanarak artık açık popover. İstersen o hamle için

auxView.frame = secondButton.frame; 

Kullanım animasyonlar:

[thePopoverController presentPopoverFromRect:auxView.bounds inView:auxView 
      permitedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

Ve şimdi sadece görünümü taşımak zorunda.

Bu tür bir ok için, bir başka şey de, okun düğmeye dokunmasını tercih ederim. Sen kullanabilirsiniz: Benim popover için

presentPopoverFromRect:CGRectInset(auxView.bounds, 4.0, 4.0) 
+0

iOS 6.0'da çalıştır, sim çalışmıyor. – CodaFi

+0

@CodaFi tam olarak ne işe yaramıyor? Ok hareketli görüntüyü takip etmiyor mu? – Gabriel

+0

Evet, ama popover bununla birlikte hareket ediyor! – CodaFi

İlgili konular