The collectionView library which is scaling, scrolling and stopping comfortably like Snapchat and Instagram.
Switch branches/tags
Nothing to show
Clone or download
Latest commit bed545a Dec 11, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
Demo add height feature 🦕 Dec 10, 2018
Images update readme 🖌 Dec 10, 2018
SnapLikeCollectionView.xcodeproj Demo2 😎 Dec 10, 2018
SnapLikeCollectionView add height feature 🦕 Dec 10, 2018
.gitignore first commit Dec 3, 2018
LICENSE Create LICENSE Dec 3, 2018 Update Dec 10, 2018
SnapLikeCollectionView.podspec update podspec ❤️ Dec 10, 2018

👻 SnapLikeCollectionView 👻

platform ios swift license tw


The collectionView library which is scaling, scrolling and stopping comfortably like Snapchat and Instagram.


Comparison with Instagram and Snapchat.

👻 This 👻 Instagram Snapchat


You can change cell height since ver. 1.1.0


Swift 4.2. Ready for use on iOS 11.0+


via Cocoapods

pod 'SnapLikeCollectionView'



You should use SnapLikeCell protocol.

Item is associatedtype. You can apply any model you want.

This Item becomes dataSource's items.

public protocol SnapLikeCell: class {
    associatedtype Item
    var item: Item? { get set }

Below is example.

import UIKit
import SnapLikeCollectionView

class SampleCell: UICollectionViewCell, SnapLikeCell {
    @IBOutlet weak var titleLabel: UILabel!
    var item: String? {
        didSet {
            titleLabel.text = item


import UIKit
import SnapLikeCollectionView

class ViewController: UIViewController {
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var collectionView: UICollectionView!
    // set your original Cell to <SampleCell>
    private var dataSource: SnapLikeDataSource<SampleCell>?
    override func viewDidLoad() {
        // setup size of cells
        let cellSize = SnapLikeCellSize(normalWidth: 100, centerWidth: 160)
        // create dataSource
        dataSource = SnapLikeDataSource<SampleCell>(collectionView: collectionView, cellSize: cellSize)
        dataSource?.delegate = self
        // create FlowLayout
        let layout = SnapLikeCollectionViewFlowLayout(cellSize: cellSize)
        collectionView.collectionViewLayout = layout
        // setup collectionView like this
        collectionView.showsHorizontalScrollIndicator = false
        collectionView.decelerationRate = .fast
        collectionView.delegate = dataSource
        collectionView.dataSource = dataSource
        // pass arrays which type is decided `Item` in the SampleCell.
        dataSource?.items = ["A", "B", "C", "D", "E"]

// listen selected listener
extension ViewController: SnapLikeDataDelegate {
    func cellSelected(_ index: Int) {
        DispatchQueue.main.async { [weak self] in
            let selectedItem: String = self?.dataSource?.items[index] ?? ""
            self?.titleLabel.text = selectedItem

Check how to use from Demo 👍👍

Welcome to your PR

This library is not perfect, so welcome to your PR 🤲🤲🤲

Author 👻

KBOY (Kei Fujikawa)

iOS Developer in Tokyo Japan, working on AR startup named Graffity Inc.


SnapLikeCollectionView is available under the MIT license. See the LICENSE file for more info.