2011-05-24 14 views
9

Bir tablonun çok sayıda satırı varsa, kullanıcı tabloyu yukarı/aşağı kaydırabilir. Bu, kaydırma hareketinin hızına/uzunluğuna bağlı olarak deterministik bir uzunluğa sahip gibi görünen bir kaydırma animasyonu yaratır. Başka kullanıcı etkileşimi olmadığında, kaydırma durduğunda tablonun hangi satırlarının görünür olacağını güvenilir bir şekilde hesaplamak mümkün mü?UITableView hangi satırda kaymayı durduracak?

+0

İyi bir soru, ama anlatabildiğim kadarıyla ... bu, etrafta tutmak için karmaşık bir işlemin olacağı gibi görünüyor. –

cevap

-1

Kaç satırın görüntüleneceğini nasıl belirleyebileceğinizi bilmiyorum, ancak her zaman kaç tane HAVE gösterildiğini görebilirsiniz. (. Tablo başka dokunmadan w/durur kez) emin değil eğer yardımcı olur ama bu bunu

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


    // make sure to declare your integer in your .h file and to also synthesize 
    //say this is your int "howManyRowsAreShowing" 
    howManyRowsAreShowing = indexPath.Row; 



    //the rest of the code below is generic table view code for example only 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Set up the cell... 
    NSString *cellValue = [listOfItems objectAtIndex:indexPath.row]; 
    cell.text = cellValue; 

    return cell; 
    } 
0

İlginç soru yapacağını nasıl ..... UITableViewDelegate yanı UIScrollViewDelegate uygundur: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/UIScrollViewDelegate

Kaydırmanın yavaşlatılmaya başladığını ve yavaşlamayı bitirdiğini öğrenmek için kullanabileceğiniz bazı delege geri çağrıları vardır.

Muhtemelen – scrollViewDidEndDecelerating:'u kullanabilir ve bu noktada, tablonun hücre yüksekliklerini ve içerik ofset özelliğini kullanın (tablo alt sınıfları UIScrollView) ve sonra yavaşlamadan sonra görünen hücreleri hesaplayın.

1

UITableViewUIScrollView devralan ve UIScrollViewDelegate yöntem ve Tablo görünümü indexPathsForVisibleRows özelliğini kullanarak, kaydırma durur şu anda görülebilir olan hücre dizini yolları kontrol etmek için bu elde edebilirsiniz.

Başlangıç ​​konumunu, yavaşlamanın başladığı yerden kaydedebilirsiniz, böylece kaydırma yönünün yukarı ya da aşağı olup olmadığını hesaplayabilirsiniz, daha sonra duracak olan hücre olup olmadığını size bildiren ilk ya da budur. görünür olanların son.

int startDeceleratingPosition; 

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { 

    startDeceleratingPosition = scrollView.contentOffset.y; 

} 

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 

    BOOL isPositionUp = startDeceleratingPosition < scrollView.contentOffset.y;  

    NSArray *paths = [_myTableview indexPathsForVisibleRows]; 
    UITableViewCell *cell; 
    if(isPositionUp){ 
     cell = [_myTableview cellForRowAtIndexPath:[paths objectAtIndex:0]]; 
    } else { 
     cell = [_myTableview cellForRowAtIndexPath:[paths lastObject]]; 
    } 

} 

yukarıdaki kodu ile ilgili önemli bir not da bu sadece uygulama ayrıntıları olmasına rağmen, değişken _myTableview yerine sadece UITableView * için temsilci yöntemi değişkeni scrollView döküm olarak tablo görünümüne işaret ve etkilememelidir gerektiğidir burada mantık.

+0

Ah, sadece kaydırma hızını elde etmek için bir yöntem varsa ... –

+0

Ama böyle bir yol var ... UIScrollView bir decelerationRate özelliğine sahiptir, bu sadece bunun için düşük seviye bir yaklaşım olur ve ayrıca bir Yanlış bir sonuç almak için daha fazla şans. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/doc/uid/TP40006922-CH3-DontLinkElementID_2 –

+0

Yavaşlama oranı sadece bir sabittir yerçekimi gibi. Kaydırmanın ne zaman ve nerede duracağıyla ilgili daha fazla hesaplama yapmak için mevcut kaydırma hızını bilmeniz gerekir. Ayrıca, genel API aracılığıyla kaydırma hızını elde etmenin herhangi bir yolunu göremiyorum. –