简体   繁体   中英

Swift - Apply effect on the UICollectionView cell cut in half

I have 5 cells in my collectionView but I only display 2.5 cells

For Example in my collectionView I have this : [][][

'[]' represents one cell in my collectionView. We can scroll horizontally to see the next cell.

What I want is to apply some effect like opacity to the last cell visible cut in half to have a smooth UI.

How can i do this ?

EDIT: A sample what i want

在此处输入图片说明

But when the cell cut in half is totally visible (not cut anymore) the transparent effect will disappear and the next cell cut in half will have the same effect

Thanks Best Regard,

Use this Code, It works I have tested It.

//make this variable global
var previousIndexPath : IndexPath = IndexPath()


func scrollViewDidScroll(_ scrollView: UIScrollView) {

    let indexPaths = fullyVisibleCells(collectionView)
    if !previousIndexPath.isEmpty {

        // Reset the Cell with transparent color
        let cell = collectionView.cellForItem(at: previousIndexPath) as! collectionViewCell
        cell.baseView.backgroundColor = .white //Here I used White color 
    }
    if !indexPaths.isEmpty {

        // Highlight the Cell with Desired color
        let cell = collectionView.cellForItem(at: indexPaths.first!) as! collectionViewCell
        cell.baseView.backgroundColor = .red // Here I have used Red color
        previousIndexPath = indexPaths.first!

    }

}

func fullyVisibleCells(_ inCollectionView: UICollectionView) -> [IndexPath] {

    var returnCells = [IndexPath]()

    var vCells = inCollectionView.visibleCells
    vCells = vCells.filter({ cell -> Bool in
        let cellRect = inCollectionView.convert(cell.frame, to: inCollectionView.superview)
        return inCollectionView.frame.contains(cellRect)
    })

    vCells.forEach({
        if let pth = inCollectionView.indexPath(for: $0) {
            returnCells.append(pth)
        }
    })

    return returnCells

}

第一 第二

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM