2013-06-27 24 views
10

Kullanıcı sürüklemeye başladığında UIScrollView öğesindeki (ilk) dokunma konumunu algılamak isterim. Bu sorunu araştırdım ve birçokları bu konuyla mücadele ediyor gibi görünüyor. Şimdi, neden kafamın Apple'ın kullanıcıların kaydırma bilgisine dokunma bilgilerine erişmesine izin vermeyecek olsa da, kendi başıma bir çözüm bulamıyorum. Ancak tüm denemeler başarısız oldu, bu yüzden size sormak istiyorum.UIScrollView'teki dokunma konumunu algıla?

benim UIScrollView alt sınıfta böyle bir UIPanGestureRecognizer kurmak ve onun jest tanıyıcıları ekleyin:

UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)]; 
tapDrag.cancelsTouchesInView = NO; 
tapDrag.delegate = self; 
[self addGestureRecognizer:tapDrag]; 

Ve eşdeğer yöntemleri:

İşte

işe düşündüm budur
-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{ 

    CGPoint loc = [t locationInView:self]; 
    //do something with location (that is exactly what I need) 
    //... 

    //Now DISABLE and forward touches to scroll view, so that it scrolls normally 
    t.enabled = NO; 
    /**** 
    ????? 
    *****/ 

} 

Yorumlar tarafından belirtildiği gibi, noktaya sahip olduktan sonra pan hareketini devre dışı bırakmak ve ardından tanıyıcıyı (STILL sürüklerken!) Devre dışı bırakmak istiyorum. ve kullanıcının kaydırma görünümünde dokunmalarını "geçir", böylece kullanıcı normal olarak gezinebilir. Bu mümkün mü? Bunun başka bir çözümü var mı?

cevap

31

Peki UIScrollView'ın zaten içine girebileceğiniz yerleşik bir pan hareketi var. Kullanımı, kaydırma konumunuzun temsilcisini (scrollViewWillBeginDragging'i kullanmak için) ve UIPanGestureRecognizer's -locationInView öğesini kullanarak dokunma konumunuzu belirlemek kadar kolay olacaktır.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    CGPoint location = [scrollView.panGestureRecognizer locationInView:scrollView]; 
    NSLog(@"%@",NSStringFromCGPoint(location)); 
} 
+0

Bu kaydırma belirli bir xx konumunda olup olmadığını belirlemek için scrollView kaydırma veya dokunma tetiklenmez mi? İki görünüm, harita ve bir kaydırma görünümünde haritanın altındaki bir panelim olduğunu söyleyeyim, haritaya dokunduğunda ve haritanın dokunuşlarını alması gerektiğinde kaydırma görünümünün temsilcisini tetiklemesini istemiyorum –

0

Neden daha kolay ve verimli olacak -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event başlangıç ​​konumuna almıyorsunuz.

+3

Dokunma işlevlerinin tamamen farkındayım ve aslında bunları uygulamaya çalıştım, ancak hiç çağrılmadılar. –

+0

Kullanıcı Etkileşimi Etkin Değil. Ancak bunu devre dışı bırakın ve olacak. Ama o zaman childobjects herhangi biriyle etkileşim edemezsiniz ... – Philip