2014-01-23 4 views

Antwort

31

Sie suchen nach einem statischen Punkt in einem statischen Zellenfeld. Ja, du wirst immer die selbe Zelle bekommen.

Um mit dem Scrollen fertig zu werden, müssen Sie die Scrollview-Position in Ihren Check einfügen. Etwas wie folgt aus:

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

    //locate the scrollview which is in the centre 
    CGPoint centerPoint = CGPointMake(self.collectionView.frame.size.width/2 + scrollView.contentOffset.x, self.collectionView.frame.size.height /2 + scrollView.contentOffset.y); 
    NSIndexPath *indexPathOfCentralCell = [self.collectionView indexPathForItemAtPoint:centerPoint]; 
} 
+1

Du bist ein Genie, Putz abrufen möchten. DANKE! – theDuncs

+2

Dieser Satz scheint seltsam oxymoronic ... – Putz1103

+0

Ich glaube nicht, dass das funktioniert. Der IndexPfad gibt immer null zurück. Ich suche eine andere Lösung. –

1

Ein Beispiel, wo Sie wollen würde dies tun, wenn Sie eine Geste auf dem UICollectionView erfassen möchten, und dann etwas mit dem spezifischen Element in der UICollectionView, die unter der Position fällt der Wischgeste. Der folgende Code als Methode in Ihrem UICollectionViewController gibt die richtige Zelle zurück und berücksichtigt das Scrollen innerhalb der Collection-Ansicht.

- (UICollectionViewCell *) cellForGesture:(id)sender 
{ 
    UISwipeGestureRecognizer * gesture = sender; 
    CGPoint point = [gesture locationInView:self.view]; 
    NSLog(@"Swipe location: %f, %f", point.x, point.y, nil); 

    CGPoint pointInCollection = CGPointMake(point.x + self.collectionView.contentOffset.x, point.y + self.collectionView.contentOffset.y); 

    NSIndexPath * indexPath = [self.collectionView indexPathForItemAtPoint:pointInCollection]; 
    UICollectionViewCell * cell = [self.collectionView cellForItemAtIndexPath:indexPath]; 
    return cell; 
} 

Sie könnten das obige Verfahren in einem Kontext wie folgt aufrufen (wo revealSupplementalControls eine benutzerdefinierte Methode auf Ihrer UICollectionViewCell Klasse):

- (IBAction) swipeLeft:(id)sender { 
    UICollectionViewCell * cell = [self cellForGesture:sender]; 
    [cell revealSupplementalControls]; 
} 
0

Duncan, ist es das, was es für mich in Swift arbeitet:

Sie müssen die Scroll-Ansicht der Sammlungsansicht berücksichtigen.

+0

Javier! Wir sehen uns beim NSBarcelona Meetup! – theDuncs

1

Hier ist, wie es in Swift zu tun, wenn Sie eine bestimmte UICollectionViewCell mit einem UILongPressGesture

@IBAction func cellAtLongPress(sender:UILongPressGestureRecognizer) { 

    var location = sender.locationInView(self.view) 

    // adjust the location to account for scrolling 
    location.x += self.collectionView.contentOffset.x 
    location.y += self.collectionView.contentOffset.y 

    let indexPath = self.collectionView.indexPathForItemAtPoint(location) 

    if (indexPath == nil) { 
     print("not over cell") 
    } else { 
     // get the cell where the longPress occured 
     let cell = self.collectionView.cellForItemAtIndexPath(indexPath!)! 

     // you now have the the cell you pressed 
    } 
} 
Verwandte Themen