2016-04-12 6 views
0

Ich versuche, die iOS9 Funktion zu replizieren, wo Sie mehrere Fotos auszuwählen ziehen, oder UICollectionViewCells: https://i.ytimg.com/vi/LZRTu3B5zlY/maxresdefault.jpgZiehen über UICollectionViewCells wählen iOS

ich one answer here sah, aber als Anfänger iOS und Objective-C-Entwickler, I konnte nicht herausfinden, was zu tun ist.

Ich habe auch versucht, von this question zu arbeiten, aber ich konnte nichts zur Auswahl bekommen.

Ich habe versucht, etwas Code, konnte aber überhaupt keine Antwort bekommen.

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    self.startPoint = [touch locationInView:self.collectionView]; 
    self.selectionBox = CGRectMake(self.startPoint.x, self.startPoint.y, 0, 0); 
    [self.collectionView setNeedsDisplay]; 
} 

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.collectionView]; 
    _selectionBox.size.width = currentPoint.x - (self.selectionBox.origin.x); 
    _selectionBox.size.height = currentPoint.y - (self.selectionBox.origin.y); 
    self.selectionBox = CGRectMake(self.startPoint.x, self.startPoint.y, 0, 0); 
    // select all the cells in this selectionBox area 
    [self.collectionView setNeedsDisplay]; 

} 

Gibt es irgendwelche Hinweise, wie dies zu codieren ist? Vielen Dank.

Antwort

3

Diese answer ziemlich fasst es

könnten Sie UIPanGestureRecognizer verwenden. Und basierend auf der Position der Pan-Ereignisse, verfolgen, welche Zellen durchlaufen werden. Wenn die Geste endet, hätten Sie ein Array ausgewählter Zellen.

Stellen Sie sicher, dass cancelsTouchesInView auf NO gesetzt ist. Sie werden die Delegierten mit GestureRecognizer festlegen müssen: shouldRecognizeSimultaneouslyWithGestureRecognizer: und gestureRecognizerShouldBegin implementiert, um sicherzustellen, das Collection noch

scrollen

ich in der Lage war, einen etwas funktionierenden Code zu schüren, die Sie könnten den Einstieg:

- (void) didPanToSelectCells:(UIPanGestureRecognizer*) panGesture{ 
    if (!selectionMode){ 
     [self.collectionView setScrollEnabled:YES]; 
     return; 
    }else{ 
     if (panGesture.state == UIGestureRecognizerStateBegan){ 
      [self.collectionView setUserInteractionEnabled:NO]; 
      [self.collectionView setScrollEnabled:NO]; 

     }else if (panGesture.state == UIGestureRecognizerStateChanged){ 
      CGPoint location = [panGesture locationInView:self.collectionView]; 

      NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:location]; 

      if (![selectedIndexes containsObject:@(indexPath.row)]){ 
       // highlight the cell using a method 
       [self highlightCell:[self.collectionView cellForItemAtIndexPath:indexPath] selected:YES]; 
      } 
     }else if (panGesture.state == UIGestureRecognizerStateEnded){ 
      [self.collectionView setScrollEnabled:YES]; 
      [self.collectionView setUserInteractionEnabled:YES]; 
     } 
    } 
} 

Sie würden eine Sammlungsansicht mit Elementen darin benötigen.

Und dann müssen Sie die UIPanGestureRecognizer erstellen und an die Kollektion hinzufügen und die Geste Aktion didPanToSelectCells:

Nur in die Pfanne Geste hören, wenn wir in den Auswahlmodus (boolean genannt selection im Beispiel) sind

Von dort müssen Sie die ausgewählten Objekte basierend auf der Touch-Position des Benutzers zu einem Array hinzufügen (im Beispiel selectedIndexes genannt) und dann diese Zelle markieren.

+0

Vielen Dank! Ich werde es ausprobieren. Eine Frage: woher kam SelectCell? Ich schaute in die Dokumente und fand das Eigentum nicht. – sallyp

+0

@sallyph ah ja, tut mir leid. Ich habe den Code bearbeitet und eine Erklärung hinzugefügt. Dies soll eine Funktion sein, die die Zelle hervorhebt, um dem Benutzer zu zeigen, dass die Zelle ausgewählt wurde. es ist eine separate Methode, die Sie erstellen müssen, je nachdem, wie Sie die Auswahl anzeigen möchten –

+0

Vielen Dank! Ich habe es herausgefunden :-) – sallyp

Verwandte Themen