2017-04-26 4 views
1

gescrollt wurden Ich habe eine Auflistung von Posts. Ich möchte in der Lage sein zu verfolgen, welche Beiträge der aktuelle Benutzer angesehen hat. Wie kann ich bestimmte Probleme vermeiden, wie zum Beispiel schnelles Scrollen, was mir nicht erlauben würde, das Ende zu verlangsamen.Wie zu sehen, welche UICollectionView-Zellen durch

Die Idee ist, alle Zellen zu kennen, die den sichtbaren Bereich des Bildschirms des Benutzers passiert haben. Meine Sammlungszellen sind im Vollbildmodus. Irgendwelche Ideen?

+0

Wenn ein Benutzer schnell durch Ihre Beiträge scrollte, ist es vielleicht in Ordnung, sie nicht betrachtet zu betrachten? – Danoram

+0

Ich denke 'UIScrollViewDelegate' wäre das Beste. Verwenden Sie keinen Timer, da dies die Leistung beeinträchtigen würde. Ich bin mir nicht sicher, warum du denkst, dass das Ende des Abbremsens nicht angemessen ist. – user1046037

+0

Und verwenden Sie indexPathForVisibleItems – user1046037

Antwort

0

Ich glaube, Sie willDisplay verwenden können, um verfolgen Zeitanzeigezelle

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 

    // Save start time view at indexPath. 
} 

Und verwenden didEndDisplaying verfolgen Endzeit Anzeigezelle

func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 

    // End time at indexPath 
    // End - Start time > "time of view" => Viewed 
} 
0

Dieser arbeitete für mich auf eine ähnliche Funktionalität zu starten, hält currentlyVisibleIndex Der Indexwert der collectionView-Zelle, die angezeigt wurde. Für Ihre Implementierung können Sie ein Array halten der Zellen den Index der, die

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>){ 
     /* set pagewidth to collectionview cell width*/ 
     let pageWidth = Float(collectionView.bounds.width) 
     let currentOffset : Float = Float(scrollView.contentOffset.x) 
     let targetOffset = Float(targetContentOffset.memory.x) 
     var newTargetOffset : Float = 0.0 

    if targetOffset > currentOffset { 
     newTargetOffset = ceilf(currentOffset/(pageWidth)) * pageWidth 
     /* if collectionview swipped right increment the curentlyVisibleIndex*/ 
     if currentlyVisibleIndex != (arrayOfModelForCollectionView.count - 1) { 
      currentlyVisibleIndex += 1 
     } 
    } 
    else{ 
     newTargetOffset = floorf(currentOffset/(pageWidth)) * pageWidth 
     /*if collectionview swipped left decrement the currentlyVisibleCounter */ 
     if currentlyVisibleIndex != 0 { 
      currentlyVisibleIndex -= 1 
     } 
    } 
    if newTargetOffset < 0{ 
     newTargetOffset = 0 
    }else if newTargetOffset > Float(scrollView.contentSize.width){ 
     newTargetOffset = Float(scrollView.contentSize.width) 
    } 
    targetContentOffset.memory.x = CGFloat(currentOffset) 
    scrollView.setContentOffset(CGPoint(x: CGFloat(newTargetOffset), y: 0), animated: true) 
} 
0

Da Ihr UICollectionViewCell ‚s sind Vollbild betrachtet worden sind, was Sie tun können, ist die UIScrollView Delegatmethode, scrollViewDidScroll implementieren und die Zelle berechnen derzeit sichtbar. So etwas wie dieses:

func scrollViewDidScroll(_ scrollView: UIScrollView) { 

    let index = scrollView.contentOffset.y/view.bounds.size.height 
} 

Dies zeigt, was Index derzeit dem Benutzer angezeigt wird. Da scrollViewDidScroll immer aufgerufen wird, können Sie mit dieser Methode ermitteln, zu welchem ​​Index sich der Benutzer gerade befindet.

Verwandte Themen